我正在向TableLayout(TableRow)添加按钮,我希望每行有10个按钮顶部但是当使用API16(可能所有API10>但我没有测试它)时它只是在5个按钮后切出(我假设太大了,这就是为什么我在它们上尝试wrap_content,也尝试填充到1,1,1,1并且它在API 10上工作使它们非常小但在API16上没有任何事情发生)这发生在模拟器和我的设备也是。
这是我想要的结果:http://img10.imageshack.us/img10/2243/fe32.png(API10)
这是我得到的结果:http://i.imgur.com/VpH8Hu1.png(API16)
的java:
public class Keyboard extends Activity implements OnClickListener{
TableLayout TblLayout;
TableRow tr;
String[] numRow = {"0","1","2","3","4","5","6","7","8","9"};
String[] engKeys = {"q","w","e","r","t","y","u","i","o","p","a","s","d","f","g","h","j","k","l","z","x","c","v","b","n","m"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_keyboard);
TblLayout = (TableLayout) findViewById(R.id.tblLayout);
createRows(numRow);
createRows(engKeys);
}
public void createRows(String[] keyValues){
int i = 0;
while (i < keyValues.length) {
if (i % keyValues.length == 0 || i % 10 == 0) {
tr = new TableRow(this);
TblLayout.addView(tr);
tr.setLayoutParams(new TableRow.LayoutParams(
TableRow.LayoutParams.WRAP_CONTENT,TableRow.LayoutParams.WRAP_CONTENT));
}
Button btn = new Button(this);
btn.setText(keyValues[i]);
btn.setGravity(1);
btn.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT ,TableRow.LayoutParams.WRAP_CONTENT));
btn.setId(i);
btn.setBackgroundColor(0xFFFFFF);
btn.setOnClickListener(this);
tr.addView(btn);
i++;
}
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
}
的xml:
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/tblLayout"
>
</TableLayout>
答案 0 :(得分:0)
一种解决方案是将LinearLayout
与weightSum
属性
How to set Table width and number of Columns in TableLayout in Android
如果您为android:weightSum="1"
设置android:layout_weight="0.1"
并使用Button
,则它将适用于所有设备,但文字很可能会被裁剪。要避免裁剪,您需要动态计算可用宽度,并确定每个Button
文本完全可见时可以插入的行数。
答案 1 :(得分:0)
没关系,发现问题,必须在更改它的属性之前将按钮添加到TableRow中。
答案 2 :(得分:0)
这不是这个问题的直接答案,而是根据api版本解释为什么setLayoutParams
表现不同的原因。
如果你比较api 17和16中的setLayoutParams
实现,你会发现一个区别是resolveLayoutParams()
;在api 17中使用而不是旧版本。该方法可以设置最新的布局参数。因此,如果您希望所有apis中的setLayoutParams
工作方式相同,请确保在onMeasure()