保持良好的android造型

时间:2015-12-19 01:08:31

标签: android android-layout user-interface

在我的Android应用程序中,我有一个以编程方式生成的按钮和按布局文件设计的按钮。

我的问题是确保我的编程生成按钮与布局文件中的按钮匹配的最佳方法是什么?

主要方法:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.content_main);

    Button subButton = new Button(getApplicationContext());

    subButton.setText("-");
    TableRow.LayoutParams lp2 = new TableRow.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT);
    subButton.setLayoutParams(lp2);

    LinearLayout container = (LinearLayout) findViewById(R.id.container);

    container.addView(subButton);

}

布局文件:          

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="-"
        android:id="@+id/addButton"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/container"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />

</RelativeLayout>

在此示例中,两个按钮看起来都不同。

编辑:

两个按钮之间的区别在于高度和宽度。我试图通过简化按钮来最小化参数差异。

编辑2:

Picture of the XML button compared to the Generated button.

3 个答案:

答案 0 :(得分:1)

如果您使用的是AppCompatActivity,则您希望使用AppCompatButton代替Button。正如Support Library 22.1 blog post中所解释的那样,当您在XML中定义标准窗口小部件时,标准窗口小部件会自动替换为它们的AppCompat等效项,以确保在所有API级别上保持一致的样式,但是对于程序化用法,您必须手动确保使用AppCompat版本

答案 1 :(得分:0)

请改用活动上下文:

Button subButton = new Button(this); // not getApplicationContext()

答案 2 :(得分:0)

我建议使用factory method解决此问题。

实现工厂方法就像定义构造对象的方法一样简单,并在将其返回给您之前添加必需的字段。这减少了很多锅炉板代码。

此外,您正在为RelativeLayout使用布局元素,因此我将向您展示一个接收RelativeLayout作为其容器的方法。如果你真的在使用LinearLayout(或其他东西!),我们必须偏离你的布局参数才能达到相同的效果。

一个合适的例子:

public Button getNewStyledButton(String text) {
    Button button = new Button(this);
    button.setText(text);
    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_START);
    button.setLayoutParams(layoutParams);
    return button;
}

然后,每当我们需要一个样式按钮时,它就像调用一样简单:

yourRelativeLayout.addView(getNewStyledButton("-")); //replace "-" with your desired text. You can also pass a `Runnable` as an argument for the button callback.

请告诉我这是否对您有所帮助,以及您是否需要有关LinearLayout的帮助。