将单个按钮宽度以编程方式填充父元素

5
如何在编程中使单个按钮的宽度填满其父级容器?我已经尝试过以下代码,但似乎无法实现。这个按钮仍然位于左上角,只有内容大小的宽度... 这里是一些关于按钮创建的代码...
public class TEST_GIFDisplay extends Activity implements View.OnClickListener {

    SurfaceView sview;
    GifRun gr = new GifRun();
    Button btnBack;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        sview = new SurfaceView(this);
        sview.setZOrderOnTop(true);

        gr.LoadGiff(sview, this, R.drawable.smiley);

        LinearLayout linearLayout1 = new LinearLayout(this);
        linearLayout1.setOrientation(LinearLayout.VERTICAL);
        linearLayout1.setBackgroundColor(Color.parseColor("#27ae60"));
        linearLayout1.setLayoutParams(new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));

        LinearLayout linearLayout2 = new LinearLayout(this);
        linearLayout2.setOrientation(LinearLayout.VERTICAL);
        linearLayout2.setBackgroundColor(Color.parseColor("#27ae60"));
        linearLayout2.setLayoutParams(new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));

        LinearLayout.LayoutParams p = new   
        LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,   
        LinearLayout.LayoutParams.WRAP_CONTENT);
        p.weight = 1.0f;

        btnBack = new Button (this);
        btnBack.setText("Back");
        btnBack.setBackgroundColor(Color.parseColor("#f1c40f"));
        btnBack.setGravity(Gravity.CENTER_HORIZONTAL);
        btnBack.setLayoutParams(p);
        btnBack.setOnClickListener(this);

        linearLayout2.addView(btnBack);
        linearLayout1.addView(linearLayout2);
        linearLayout1.addView(sview);

        setContentView(linearLayout1);
    }

    @Override
    public void onClick(View view) {
        btnBack = (Button) view;
        btnBack.setBackgroundColor(Color.parseColor("#2980b9")); //color change
        new CountDownTimer(100, 50) {

            @Override
            public void onTick(long arg0) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onFinish() {
                btnBack.setBackgroundColor(Color.parseColor("#f1c40f")); // original color
            }
        }.start();//end color changed

        finish();
    }
}

你将这个按钮添加到哪个布局中,请也贴出相关代码。 - Salman Khakwani
@MrSMAK,我已经编辑了完整的代码,我想创建一个活动来显示GIF图像,并能够返回到以前的屏幕,因此按钮是返回到以前的屏幕。 - Chrisantics
1个回答

4
你正在将Button添加到linearLayout2中。你应该将linearLayout2的宽度改为MATCH_PARENT
linearLayout2.setLayoutParams(new ViewGroup.LayoutParams(
        ViewGroup.LayoutParams.MATCH_PARENT,
        ViewGroup.LayoutParams.WRAP_CONTENT));

希望这能帮到您。

附:您可以创建 Button 的选择器来实现按下和选中状态,而不是使用计时器来显示按下按钮的效果。以下是一个基本链接,可帮助您实现此目标:android button selector


非常感谢@MrSMAK!! 它起作用了!! 顺便说一下,对于您分享的Android选择器链接,如果我的按钮是以编程方式创建而不是在XML布局中创建,我该如何将按钮背景设置为XML选择器文件? 预先感谢! - Chrisantics
1
不客气 :-),你可以将选择器添加到你的 drawable 目录并像这样设置到你的按钮上:Button b = new Button(Context); b.setBackgroundResource(R.drawable.YOUR_XML_SELECTOR); - Salman Khakwani
谢谢你再次回答有关按钮颜色更改的问题!它起作用了,但是整个屏幕都设置为相同的按钮效果。为什么会这样?抱歉我是新手! - Chrisantics

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接