2014-01-21 2 views
1

Я пытаюсь программным образом добавить некоторый вид в свой ScrollView. Вот xml-код представления, который я пытаюсь добавить. Это написано в горизонтальной линейной компоновкиAndroid Прокрутите до конца гладко

<RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="70dp" 
      android:padding="10dp"> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentLeft="true" 
       android:layout_centerVertical="true" 
       android:text="1. Sadlier ofxord " 
       android:textColor="@color/text_color" 
       android:textSize="16sp" /> 

      <ImageButton 
       android:contentDescription="@string/hello_world" 
       android:layout_alignParentRight="true" 
       android:layout_width="50dp" 
       android:layout_height="50dp" 
       android:layout_centerVertical="true" 
       android:background="@drawable/delete_button" 
       android:src="@drawable/delete_icon" /> 



     </RelativeLayout> 
     <View 
      android:layout_width="fill_parent" 
      android:layout_height = "2dp" 
      android:background="@color/text_color"/> 

Эти функции создания представлений

private RelativeLayout createContainerLayout(){ 
    RelativeLayout layout = new RelativeLayout(getApplicationContext()); 
    layout.setPadding(10, 10, 10, 10); 
    RelativeLayout.LayoutParams params = new  RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 70); 
    layout.setLayoutParams(params); 
    return layout; 
} 

private ImageButton createDeleteImageButton(){ 
    ImageButton button = new ImageButton(getApplicationContext()); 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(50, 50); 
    params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
    params.addRule(RelativeLayout.CENTER_VERTICAL); 
    button.setLayoutParams(params); 
    button.setBackgroundResource(R.drawable.delete_button); 
    button.setImageResource(R.drawable.delete_icon); 
    return button; 
} 

private TextView createSetNameText(int counter , String name){ 
    TextView text = new TextView(getApplicationContext()); 
    text.setText(counter+". "+name); 
    text.setTextSize(16); 
    text.setTextColor(getResources().getColor(R.color.text_color)); 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    params.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
    params.addRule(RelativeLayout.CENTER_VERTICAL); 
    return text; 
} 

private View createLineView(){ 
    View line = new View (getApplicationContext()); 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT , 2); 
    line.setLayoutParams(params); 
    line.setBackgroundColor(getResources().getColor(R.color.text_color)); 
    return line; 
} 

и это, как я могу добавить точку к ScrollView

lLayoutContainer.addView(rLayout); 
rLayout.addView(setName); 
rLayout.addView(deleteButton); 
lLayoutContainer.addView(line); 

Но я получаю что-то вроде это в конце концов. Первая строка - это строка, созданная XML, а следующие две строки создаются программно. Итак, что не так с моим кодом? Почему это создает макет с меньшей высотой

enter image description here

ответ

1

Для обоих setPadding и LayoutParams конструктора, вы передаете в явных значений для размера. Это будет абсолютный размер пикселя, независимо от плотности экрана.

Пожалуйста, взгляните на getDimensionPixelOffset или getDimensionPixelSize. Например:

private RelativeLayout createContainerLayout(){ 
    final Resources r = getResources(); 
    final int tenDp = r.getDimensionPixelSize(R.dimens.my_padding); 
    RelativeLayout layout = new RelativeLayout(getApplicationContext()); 
    layout.setPadding(tenDp, tenDp, tenDp, tenDp); 

    final int seventyDp = r.getDimensionPixelSize(R.dimens.my_height); 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, seventyDp); 
    layout.setLayoutParams(params); 
    return layout; 
} 
+0

Спасибо, что это сработало – user3199577

Смежные вопросы