在Gingerbread(API 10)中使用Theme.AppCompat,以编程方式添加的按钮与通过XML添加的按钮不匹配。它适用于所有较新的API,它只是Gingerbread的一个问题。 This image shows the issue.
以下是添加按钮的代码:
for (int i = 0; i < btnFiles.length; i++) {
btnFiles[i] = new Button(this);
btnFiles[i].setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
btnFiles[i].setGravity(Gravity.CENTER);
btnFiles[i].setId(100 + i);
btnFiles[i].setText(fileList.get(i).replace(".xml", ""));
btnFiles[i].setTag(fileList.get(i));
registerForContextMenu(btnFiles[i]);
btnFiles[i].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Continue(v); //Start next activity when button is pressed
}
});
l.addView(btnFiles[i]);
setTitle(getString(R.string.title_activity_load_menu));
}
答案 0 :(得分:1)
使用Button创建一个布局文件,并使用LayoutInflater对其进行充气。
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
... />
LayoutInflater inflater = getLayoutInflater();
for (int i = 0; i < btnFiles.length; i++) {
btnFiles[i] = (Button) inflater.inflate(R.layout.button, l, false);
// everything else, except the LayoutParams stuff because that's in the layout file
}
答案 1 :(得分:1)
为了澄清任何路过的人,问题可能是来自XML的<Button>
标记被AppCompatButton
和<item name="buttonStyle">...</item>
的实例取代(假设已经过去了用过的)适用于那个。许多其他观点也会发生同样的事情。
因此,替代可能性可以将<item name="buttonStyle">...</item>
和<item name="android:buttonStyle">...</item>
放入样式中,以便Button
和AppCompatButton
可以合并,这将是非常混乱。
更好的选择是使用AppCompat为API实例化AppCompatButton
,但使用 XML布局只使用单个按钮似乎是最安全的最便携的解决方案,所以去那个,假设您没有理由不这样做。