android线性布局中的对齐方式

时间:2013-03-05 18:32:01

标签: android android-layout alignment

我使用线性布局,包含2个textviews,4个按钮,1个搜索栏,1个图像视图。如果我将这些文本视图,按钮等放置在线性布局中,那么在Android手机中对齐就可以了。当我在Android平板电脑上运行相同的代码时,对齐是不正确的。为什么这种对齐在平板电脑中不合适?我已经通过java代码创建了textviews,buttons等。即使我通过设置第二个文本视图的左边距 devicewidth / 2 水平指定两个文本视图,具有Android手机和平板电脑的差异。我需要像下面那样对齐。

 TextView1                            TextView2
 Button1 Button2 Button3 Button4      SeekBar  ImageView

这是我的代码。

 LinearLayout.LayoutParams textViewParams1 = new LinearLayout.LayoutParams(
             LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    textViewLayout.setOrientation(LinearLayout.HORIZONTAL); 
    TextView TextView1=new TextView(this);
    TextView1.setText("Text1");
    textViewParams1.gravity=Gravity.CENTER;
    textViewParams1.setMargins(60, 20, 40, 10);
    textViewLayout.addView(chooseColorTextView, textViewParams1);

    LinearLayout.LayoutParams textViewParams2 = new LinearLayout.LayoutParams(
             LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    TextView TextView2=new TextView(this);
    TextView2.setText("Text2");
    int width=getWindowManager().getDefaultDisplay().getWidth();
    textViewParams2.gravity=Gravity.CENTER;     
    textViewParams2.setMargins((width/2), 20, 40, 10);
    textViewLayout.addView(strokeWidthTextView, textViewParams2);

    parentlinearLayout.addView(textViewLayout, textViewLayoutParams);

在下一个线性布局中,我添加了4个按钮,搜索栏和图像视图。但是面对问题。

4 个答案:

答案 0 :(得分:2)

我建议创建复杂的布局,必须在XML中以不同的屏幕尺寸呈现,而不是以编程方式呈现,因此您可以在res / layout和res / layout-large中使用两个不同的main.xml,系统会选择根据屏幕尺寸更正。

答案 1 :(得分:1)

在XML中使用layout_weight和weightSum:

<LinearLayout android:weightSum="1" android:layout_width="match_parent" android:layout_height="wrap_content">
    <!-- First column -->
    <LinearLayout android:layout_weight=".5" android:layout_width="0dp" android:layout_height="wrap_content"> ... </LinearLayout>

    <!-- Second column -->
    <LinearLayout android:layout_weight=".5" android:layout_width="0dp" android:layout_height="wrap_content"> ... </LinearLayout>
</LinearLayout>

这将生成动态调整大小的2列布局。如果您希望划分更短或更长,则将.5更改为.3和.7以进行30/70%拆分等。

答案 2 :(得分:0)

请阅读有关wrap_content和其他Android控件的更多信息。另请阅读有关平板电脑dpi的信息。由于分辨率外观的变化。

答案 3 :(得分:0)

为什么不使用 TableLayout ?它是管理细胞对齐所需的那个:

您需要的所有内容都在span属性中,以使单元格使用多个列。

TableLayout myLayout = new TableLayout(myContext);

TableRow row1 = new TableRow(myContext);
TableRow.LayoutParams layouparams1 = new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT,TableRow.LayoutParams.WRAP_CONTENT);
layouparams1.span = 4;
row1.setLayoutParams = layouparams1 ;

TableRow.LayoutParams layouparams2 = new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT,TableRow.LayoutParams.WRAP_CONTENT);
layouparams2.span = 2;
TableRow row2 = new TableRow(myContext);
row2.setLayoutParams = layouparams2 ;


//then create and add your childs to each row :
...
row1.addView(text1);
row1.addView(text1);

row1.addView(button1);
row1.addView(button2);
row1.addView(button3);
row1.addView(button4);
row1.addView(seekbar);
row1.addView(imageView);

myLayout.addView(row1);
myLayout.addView(row2);

还考虑在儿童身上添加 layout_weight 来管理彼此留下的空间。