gpt4 book ai didi

java - Android - 动态创建 View 无法按预期工作

转载 作者:行者123 更新时间:2023-11-30 11:02:43 25 4
gpt4 key购买 nike

我正在开发一个 android 应用程序,我在其中创建 View ,如 RadioButtonCheckBoxEditText 动态基于 json 响应并以编程方式使用 Java 添加到 LinearLayout。在 micromax A114 中,我得到了预期的结果! here .

但是当我使用 Samsung note edge 进行测试时,它会折叠并且看起来不太好。

here .

这是我使用的代码

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;
}
}

最佳答案

你正在像这样设置你的View的高度:

params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 40);

没有关于此构造函数的文档,但 LinearLayout.LayoutParams (int width, int height, float weight) 的 javadoc 说明如下:

Parameters

width the width, either MATCH_PARENT, WRAP_CONTENT or a fixed size in pixels

height the height, either MATCH_PARENT, WRAP_CONTENT or a fixed size in pixels

这实际上意味着您正在使用的构造函数采用的是像素,而不是 dp。由于像素密度因设备而异,因此您需要在运行时根据屏幕密度计算 View 的高度(以像素为单位)。您可以使用以下方法将 dp 转换为像素:

public int dpToPx(int dp) {
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
return (int)((dp * displayMetrics.density) + 0.5);
}

关于java - Android - 动态创建 View 无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30671288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com