我正在开发一个Android应用程序,我在其中根据RadioButton
响应动态创建CheckBox
,EditText
,json
等视图并添加到LinearLayout
以编程方式使用Java。
在micromax A114中,我得到了预期的结果!
。
但是当我使用Samsung note edge
进行测试时,它会崩溃并且看起来不太好。
这是我使用的编码
for (int dynamicViews = 0; dynamicViews < FormFieldsController
.initializeFormFieldsController().initializeFormFields().size(); dynamicViews++){
int fieldType = Integer.parseInt(formFields.getFieldType());
switch (fieldType) {
case VIEW_TYPE_EDIT_TEXT:
LinearLayout fieldLabel = new LinearLayout(context);
fieldLabel.setOrientation(LinearLayout.VERTICAL);
params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, 40);
params.setMargins(10, 10, 0, 0);
TextView label = new TextView(context);
label.setBackground(context.getResources().getDrawable(
R.drawable.text_area_field_title_background));
label.setTextColor(Color.parseColor("#FFFFFF"));
label.setPadding(10, 5, 10, 0);
label.setText(formFields.getFieldName());
label.setLayoutParams(params);
fieldLabel.addView(label);
params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, 200);
final EditText editText = new EditText(context);
editText.setGravity(Gravity.CENTER);
params.setMargins(10, 0, 10, 10);
editText.setLayoutParams(params);
editText.setBackground(context.getResources().getDrawable(
R.drawable.cornerless_rc_bg));
editText.setHint("Type Here ...");
if (formFields.getCrfFormField().getFieldValue() != null) {
editText.setText(formFields.getCrfFormField()
.getFieldValue());
}
editText.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
FormFieldsController.initializeFormFieldsController()
.initializeFormFields().get(position)
.getCrfFormField()
.setFieldValue(editText.getText().toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
// TODO Auto-generated method stub
}
});
fieldLabel.addView(editText);
container.addView(fieldLabel);
break;
}
}
答案 0 :(得分:1)
您正在设置View
的高度,如下所示:
params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 40);
此构造函数没有文档,但LinearLayout.LayoutParams (int width, int height, float weight)
的javadoc说明如下:
参数
宽度宽度,MATCH_PARENT,WRAP_CONTENT或a 固定大小(以像素为单位)
高度,MATCH_PARENT, WRAP_CONTENT或固定大小(以像素为单位)
这实质上意味着您使用的构造函数是像素,而不是dp。由于像素密度因设备而异,因此您需要根据屏幕密度计算运行时View
的高度(以像素为单位)。您可以使用以下方法将dp转换为像素:
public int dpToPx(int dp) {
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
return (int)((dp * displayMetrics.density) + 0.5);
}