Android 以编程方式设置ImageButton布局 我想做什么

Android 以编程方式设置ImageButton布局 我想做什么,android,android-layout,android-linearlayout,layout-gravity,Android,Android Layout,Android Linearlayout,Layout Gravity,我试图通过Java代码设置我的ImageButton的layout\u gravity,我希望ImageButton的显示方式与下图中的橙色框架类似: 蓝色框架是一个垂直的线性布局用作“基本”布局,这就是我试图添加子布局的布局 橙色和红色都是水平线性布局 橙色布局是我想要放置图像按钮和文本视图的方式,这是通过XML设置的 红色布局是我试图通过Java代码模拟橙色布局的结果 相关代码 下面是设置橙色布局的XML代码,这是我希望通过Java代码实现的效果: <!-- Begi

我试图通过Java代码设置我的
ImageButton
layout\u gravity
,我希望
ImageButton
的显示方式与下图中的橙色框架类似:

蓝色框架是一个垂直的
线性布局
用作“基本”布局,这就是我试图添加子布局的布局

橙色红色都是水平
线性布局

橙色布局是我想要放置
图像按钮
文本视图
的方式,这是通过XML设置的

红色布局是我试图通过Java代码模拟橙色布局的结果

相关代码 下面是设置橙色布局的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>
到目前为止我都试过了 根据一些类似这样的帖子:我最初尝试先将我的
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
width以匹配\u PARENT
,结果发现
ImageButton`水平拉伸(是的,拉伸了)

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

他们的方法是先设置
线性布局.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);
然而,结果仍然与上面显示的图像相同

问题: 由于我以后需要以编程方式将更多子视图添加到蓝色布局中,我想知道是否有一种方法可以将每个子视图设置为图像中的橙色布局

终于

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

以下是我的解决方案:

    LinearLayout.LayoutParams textParams = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT);
    textParams.weight = 1.0f;
    mTextView.setLayoutParams(textParams);
请为文本视图尝试布局\u width=“0dp”布局\u weight=“1”。这将告诉TextView占据整个可用宽度,以便带有ImageView的FrameLayout将与右边框对齐

    <TextView
        android:id="@+id/textView1"
        android:layout_width="0dp"
        android:layout_weight="1"
        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" />


与其使用标准的
线性布局,为什么不尝试使用更复杂的
相对布局呢?使用它,可以调整每个视图相对于其他视图的位置。您可以将橙色版面中的
ImageButton
设置为
android:layout\u alignParentRight=“true”
,这将设置附加到父版面右侧的按钮,在我的情况下设置为
RelativeLayout
,但在您的情况下设置为
LinearLayout
。是Android开发者网站上相关版面的API指南链接。

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

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

很抱歉,恐怕您没有完全理解我的问题……我正在尝试通过Java代码设置布局,以获得与XML相同的结果。红色框是我通过Java代码尝试的结果,橙色框是我想要实现的效果,这是通过XML实现的,没有任何问题。+1是一个好问题。实际上,我找到了与您非常相似的解决方案:
LinearLayout.LayoutParams textParams=newlinearlayout.LayoutParams(0,LayoutParams.WRAP\u CONTENT);textParams.weight=1.0f;mTextView.setLayoutParams(textParams)
mTextView.setLayoutParams(LayoutParams param = new LinearLayout.LayoutParams(
                         LayoutParams.MATCH_PARENT,
                         LayoutParams.MATCH_PARENT, 1.0f));