图标可绘制在一个按钮,API低21

时间:2017-10-24 16:30:20

标签: android android-layout android-vectordrawable

我有两项活动AddActivtyViewActivity。这两个活动共享文件layout_form.xml中定义的布局视图。

首先,我的应用需要使用最低sdk版本16 。所以在我指定的build.gradle文件中。

这是layout_form.xml的剪辑。剩下的代码并不重要。

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="orizontal">

        <Button
            android:id="@+id/leftToolbarButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:drawableLeft="@drawable/ic_done"
            android:drawableStart="@drawable/ic_done"
            android:text="ADD"
            android:textColor="@android:color/white" />
        <Button
            android:id="@+id/rightToolbarButton"
            style="@style/Widget.AppCompat.Button.Borderless"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:drawableEnd="@drawable/ic_cancel"
            android:drawableRight="@drawable/ic_cancel"
            android:text="CANCEL"
            android:textColor="@android:color/white" />
    </LinearLayout>
</Toolbar>

在这两个活动中,我将此布局设置为该行的内容视图     的setContentView(R.layout.layout_form);

这就是我的应用工具栏在屏幕上显示AddActivity时的样子。

enter image description here

到目前为止,非常好。

当我开始ViewActivity时会出现问题。 这是onCreate()方法中的代码。

Button backButton=(Button)findViewById(R.id.leftToolbarButton);
backButton.setText("BACK");
//PROBLEM HERE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
backButton.setCompoundDrawablesWithIntrinsicBounds(
    R.drawable.ic_back, 0, 0, 0);

Button editButton=(Button)findViewById(R.id.rightToolbarButton);
editButton.setText("EDIT");
//AND PROBLEM HERE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
editButton.setCompoundDrawablesWithIntrinsicBounds(
0, 0, R.drawable.ic_edit, 0);

现在,如果我在android&gt; = 21上运行我的应用程序一切正常。这就是工具栏应该如何。

enter image description here

相反,在Android 16上它以这种方式看起来。

enter image description here

正如您所看到的,如果我的应用程序在Android 16上运行(我不知道Android 17或更高版本会发生什么,但低于21) 图标不会更改。它们看起来仍然与xml布局文件中设置的相同。

另一件事。我将此监听器添加到editButton

editButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        backButton.setCompoundDrawablesWithIntrinsicBounds(
        R.drawable.ic_back, 0, 0, 0);
    }
});

如果我点击它,现在图标会改变。

enter image description here

那么,为什么onCreate()的{​​{1}}方法不会改变图标?

1 个答案:

答案 0 :(得分:0)

解决! 问题是

android:drawableStart="@drawable/ic_done"
<{1>}中的

leftToolbarButton
android:drawableEnd="@drawable/ic_cancel" 中的

我从layout_form.xml移出了这两行。 我添加了它们,因为Android Studio建议我添加它们以便更好地支持从左到右的布局。