2014-01-21 39 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; 
} 

,这是我怎么加的意见,以滚动型

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

但我得到的东西像这到底。第一行是由XML创建的行,接下来的两行是programaticaly创建的。那么我的代码有什么问题?为什么它具有较小的高度

enter image description here

回答

1

对于这两种setPaddingLayoutParams构造函数创建一个布局,你传递明确的值的大小。无论屏幕密度如何,这将是绝对像素大小。

请转到getDimensionPixelOffsetgetDimensionPixelSize。例如:

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