我使用线性布局,包含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个按钮,搜索栏和图像视图。但是面对问题。
答案 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 来管理彼此留下的空间。