2015-06-05 151 views
2

我正在開發中,我創建像RadioButtonCheckBoxEditText動態基於json響應和使用Java編程增加LinearLayout觀點Android應用程序無法正常工作。 在micromax A114中,我得到了預期的結果! hereAndroid的 - 創建視圖動態預期

但是,當我測試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; 
} 
} 
+0

視圖的高度是固定的(40),但所有設備上的像素密度都不相同。也許你需要根據屏幕密度動態計算高度? – 2Dee

回答

1

你設置你View的高度,這樣的編碼:

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

有這個構造函數,但Javadoc文檔LinearLayout.LayoutParams (int width, int height, float weight)沒有醫生說以下內容:

參數

寬度的寬度,或是MATCH_PARENT,WRAP_CONTENT或在像素 固定大小

高度的高度,無論是MATCH_PARENT, WRAP_CONTENT或以像素

固定的大小這基本上意味着,構造你正在使用的是拍攝像素,而不是dp。由於不同設備的像素密度不同,因此您需要根據屏幕密度計算運行時的像素高度(以像素爲單位)。您可以使用以下方法將dp轉換爲像素:

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

它的工作原理。非常感謝:-) –

+1

很高興我可以幫忙;) – 2Dee