Android 当 Button 具有可绘制对象时应用程序停止<xyz>
Android App stops when Button has drawable<xyz>
我在向文本左侧或上方的按钮添加图标时遇到问题。
这是我的测试场景:
我的应用程序已经有一个主 activity 和一个按钮来启动新添加的测试 activity。
我将 "Empty Activity" 添加到我的应用程序,在其上放置一个按钮并启动应用程序,activity 显示一切正常。
现在我设置按钮的 'drawableTop="@drawable/ic_add_circle',其中 ic_add_circle 包含 Android Studio material 图标 "add circle outline",分辨率为 24x24dp。
在设计编辑器中一切看起来都很好,但是当我启动我的应用程序并尝试显示 activity 时,应用程序立即停止。
我用 drawableTop、Left、Right、Bottom 尝试过这个——总是一样的。
我做错了什么?
这是Activity的xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="me.myself.i.test.myActivity">
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:drawableTop="@drawable/ic_add_circle"
android:text="Button"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
...图标
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M13,7h-2v4L7,11v2h4v4h2v-4h4v-2h-4L13,7zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8z"/>
</vector>
...和 java 代码
package me.myself.i.test;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class myActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity);
}
}
使用矢量图标作为任何视图的 left/right/bottom/top 可绘制对象将最终导致棒棒糖之前设备的应用程序崩溃,因为棒棒糖及更高版本支持矢量可绘制对象。但是您可以像这样以编程方式设置可绘制对象以避免在棒棒糖之前的设备中崩溃:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity);
Button button = findViewById(R.id.button4);
button.setCompoundDrawablesWithIntrinsicBounds(null,
AppCompatResources.getDrawable(this, R.drawable.ic_add_circle), null, null);
}
我在向文本左侧或上方的按钮添加图标时遇到问题。 这是我的测试场景:
我的应用程序已经有一个主 activity 和一个按钮来启动新添加的测试 activity。
我将 "Empty Activity" 添加到我的应用程序,在其上放置一个按钮并启动应用程序,activity 显示一切正常。
现在我设置按钮的 'drawableTop="@drawable/ic_add_circle',其中 ic_add_circle 包含 Android Studio material 图标 "add circle outline",分辨率为 24x24dp。
在设计编辑器中一切看起来都很好,但是当我启动我的应用程序并尝试显示 activity 时,应用程序立即停止。 我用 drawableTop、Left、Right、Bottom 尝试过这个——总是一样的。 我做错了什么?
这是Activity的xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="me.myself.i.test.myActivity">
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:drawableTop="@drawable/ic_add_circle"
android:text="Button"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
...图标
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M13,7h-2v4L7,11v2h4v4h2v-4h4v-2h-4L13,7zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8z"/>
</vector>
...和 java 代码
package me.myself.i.test;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class myActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity);
}
}
使用矢量图标作为任何视图的 left/right/bottom/top 可绘制对象将最终导致棒棒糖之前设备的应用程序崩溃,因为棒棒糖及更高版本支持矢量可绘制对象。但是您可以像这样以编程方式设置可绘制对象以避免在棒棒糖之前的设备中崩溃:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity);
Button button = findViewById(R.id.button4);
button.setCompoundDrawablesWithIntrinsicBounds(null,
AppCompatResources.getDrawable(this, R.drawable.ic_add_circle), null, null);
}