草庐IT

android - 以编程方式设置 ImageButton layout_gravity

coder 2023-11-27 原文

我想做什么

我试图通过 Java 代码设置我的 ImageButtonlayout_gravity,我希望 ImageButton 的显示方式如下在下图中的橙色框内:

Blue 框架是一个垂直的 LinearLayout 作为“基础”布局,这是我尝试添加子布局的布局。

OrangeRed 都是水平的LinearLayout

Orange 布局是我想要放置 ImageButtonTextView 的方式,这个是通过 XML 设置的

Red 布局是我尝试通过 Java 代码模仿Orange 布局的结果。

相关代码

下面是设置Orange布局的XML代码,这是我想通过Java代码实现的效果:

        <!-- Begin the Orange Layout -->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/info_left_padding"
            android:layout_marginRight="@dimen/info_right_padding" >

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:gravity="center_vertical"
                android:minHeight="@dimen/detail_min_line_item_height"
                android:text="TextView" />

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <ImageButton
                    android:id="@+id/imageButton1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="right|center_vertical"
                    android:adjustViewBounds="true"
                    android:maxHeight="@dimen/abs__action_bar_default_height"
                    android:scaleType="fitCenter"
                    android:src="@drawable/navigation_cancel" />
            </FrameLayout>
        </LinearLayout>

这是设置红色布局的Java代码

        int textHeight = (int)getResources().getDimension(R.dimen.detail_min_line_item_height);
        int imgHeight = (int)getResources().getDimension(R.dimen.abs__action_bar_default_height);

        TextView mTextView = new TextView(this);
        ImageButton mDeleteButton = new ImageButton(this);

        // Set Delete Button Padding
//      mDeleteButton.setPadding(buttonPadding, buttonPadding, buttonPadding, buttonPadding);

        // Set Imagebutton Scale type as fitCentre
        mDeleteButton.setScaleType(ScaleType.FIT_CENTER);

        // Set AdjustViewBounds
        mDeleteButton.setAdjustViewBounds(true);

        // Set max height of the image
        mDeleteButton.setMaxHeight(imgHeight);

        // Set the text appearance to be "large"
        mTextView.setTextAppearance(this, android.R.style.TextAppearance_Large);
        mTextView.setText(text);

        // Set the minimum height of this textview
        mTextView.setMinHeight(textHeight);

        // Set the content of the textview to be centred
        mTextView.setGravity(Gravity.CENTER_VERTICAL);

        // Set the ImageButton's background image
        mDeleteButton.setImageResource(R.drawable.navigation_cancel);

        LinearLayout.LayoutParams hParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);

        LinearLayout hLayout = new LinearLayout(this);
        // Set Margins
        hParams.leftMargin = (int) getResources().getDimension(R.dimen.info_left_padding);
        hParams.rightMargin = (int) getResources().getDimension(R.dimen.info_right_padding);
        hParams.bottomMargin = (int) getResources().getDimension(R.dimen.text_layout_margin);

        hLayout.setLayoutParams(hParams);
        // Set orientation to horizontal
        hLayout.setOrientation(LinearLayout.HORIZONTAL);

        // The settings below is actually setting up some of the button's parameters        
        LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        buttonParams.gravity = Gravity.RIGHT;
        mDeleteButton.setLayoutParams(buttonParams);

        hLayout.addView(mTextView);
        hLayout.addView(mDeleteButton);

        layout_blue.addView(hLayout);

到目前为止我尝试了什么

根据一些这样的帖子:Java method for android:layout_gravity我最初尝试先将我的 ImageButton 放入 FrameLayout,然后设置此 FrameLayout 的参数,如下所示:

FrameLayout buttonFrame = new FrameLayout(this);
FrameLayout.LayoutParams buttonParams = new FrameLayout.LayoutParams(android.widget.FrameLayout.LayoutParams.WRAP_CONTENT, 
                                                                            android.widget.FrameLayout.LayoutParams.WRAP_CONTENT, 
                                                                            Gravity.RIGHT | Gravity.CENTER_VERTICAL);
buttonFrame.setLayoutParams(buttonParams);
buttonFrame.addView(mDeleteButton);

但我得到的结果与上面显示的图像相同。后来我也尝试将 LayoutParams 宽度更改为 MATCH_PARENT 才发现 ImageButton` 被水平拉伸(stretch)了(是的,它被拉伸(stretch)了)

然后我尝试了这两个SO帖子中发布的方法:

How to set layout_gravity programmatically?

How to set a button's parameters programatically

他们的方法是先设置一个LinearLayout.Params,然后把这个参数应用到按钮上(我在相关代码部分贴出的代码就是用这个方法) .简而言之就是:

    // The settings below is actually setting up some of the button's parameters        
    LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    buttonParams.gravity = Gravity.RIGHT;
    mDeleteButton.setLayoutParams(buttonParams);

但是,结果还是和上图一样。

问题

由于稍后我需要以编程方式向Blue 布局添加更多 subview ,我想知道是否有一种方法可以像 Orange 那样设置每个子布局图片?

最后

我找到了一个与@Permita 的答案非常相似的解决方案。

这是我的解决方案:

    LinearLayout.LayoutParams textParams = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT);
    textParams.weight = 1.0f;
    mTextView.setLayoutParams(textParams);

最佳答案

添加下面的代码,它将所有可用空间分配给 texView,将按钮移动到布局的右侧,使其看起来像 orangeLayout。

mTextView.setLayoutParams(LayoutParams param = new LinearLayout.LayoutParams(
                         LayoutParams.MATCH_PARENT,
                         LayoutParams.MATCH_PARENT, 1.0f));

关于android - 以编程方式设置 ImageButton layout_gravity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15900523/

有关android - 以编程方式设置 ImageButton layout_gravity的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby-openid:执行发现时未设置@socket - 2

    我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass

  3. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  4. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  5. ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量? - 2

    我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击

  6. ruby-on-rails - date_field_tag,如何设置默认日期? [ rails 上的 ruby ] - 2

    我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问

  7. ruby-on-rails - 正确的 Rails 2.1 做事方式 - 2

    question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参

  8. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  9. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  10. ruby-on-rails - 有没有办法为 CarrierWave/Fog 设置上传进度指示器? - 2

    我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r

随机推荐