具有XML定义的样式的按钮;如果样式设置在代码中则不相同

时间:2017-04-26 23:24:11

标签: android android-layout xamarin.android

我正在尝试从代码中为Xamarin Android中的按钮添加样式,因为按钮将动态生成并需要根据其他系统事件更改颜色。

使用此处显示的代码,我希望这两行(一行是从XML呈现,另一行是从代码中呈现)看起来完全相同。相反,我看到ButtonDefaultTheme样式仅应用于第一行。

我知道可以根据this answerthis one从代码设置样式。我认为我可以使用this answer中的布局填充来完成我需要的东西,但我很好奇为什么我的代码不起作用。

public class MainActivity : Activity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView (Resource.Layout.Main);

        LinearLayout roomButtonLayout = FindViewById<LinearLayout>(Resource.Id.roomButtonLayout);
        LinearLayout roomInfo = new LinearLayout(this)
        {
            Orientation = Orientation.Horizontal,
            LayoutParameters = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MatchParent, LinearLayout.LayoutParams.MatchParent, 1f)
        };
        roomInfo.SetGravity(GravityFlags.CenterVertical);
        roomInfo.SetPadding(20, 10, 0, 10);

        TextView roomNameDisplay = new TextView(this)
        {
            Gravity = GravityFlags.Left,
            TextSize = 20, // defaults to scaled pixels
            Text = "Room 100",
            LayoutParameters = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WrapContent, LinearLayout.LayoutParams.WrapContent, 1f)
        };

        roomInfo.AddView(roomNameDisplay);

        Button button2 = new Button(new ContextThemeWrapper(this, Resource.Style.ButtonDefaultTheme), null, 0)
        {
            Text = "View2"
        };

        roomInfo.AddView(button2);

        roomButtonLayout.AddView(roomInfo);
    }  
}

在Main.axml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:layout_width="match_parent"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:layout_height="wrap_content"
    android:id="@+id/roomButtonLayout">
    <LinearLayout
        android:orientation="horizontal"
        android:gravity="center_vertical"
        android:paddingLeft="20dp"
        android:paddingRight="0dp"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1">
        <TextView
            android:gravity="left"
            android:textSize="20sp"
            android:text="Room 100"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1" />
        <Button
            android:text="View1"
            style="@style/ButtonDefaultTheme" />
      </LinearLayout>
  </LinearLayout>

在styles.xml中

<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <style name="ButtonDefaultTheme" parent="android:style/Widget.Holo.Button">
    <item name="android:paddingBottom">0dp</item>
    <item name="android:paddingTop">0dp</item>
    <item name="android:paddingLeft">10dp</item>
    <item name="android:paddingRight">10dp</item>
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_weight">1</item>
    <item name="android:minWidth">100dp</item>
  </style>
</resources>

结果:

Screenshot showing the TextView in the first row has greater left padding, and the button for View2 is much shorter than the button for View1

  • 所需的最低API级别:19

  • 在实际应用中使用:21,在测试应用中使用23。两者都有相同的视觉效果。

0 个答案:

没有答案