Android布局 - 基于水平中心定位视图

时间:2013-08-27 23:28:39

标签: android android-layout textview android-edittext relativelayout

我正在尝试在屏幕顶部创建一行四个TextView。该行应包含右侧的TextView,左侧的TextView和右侧TextView旁边的两个TextView。对于前两个TextView,以下代码可以正常工作:

<TextView
android:id="@+id/textViewRight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:paddingLeft="150dip"
android:text="Right TextView"
android:layout_alignParentTop="true"
/>
<TextView 
android:id="@+id/textViewLeft"
android:layout_width="wrap_content" 
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Left TextView"
android:layout_alignBaseline="@id/textViewRight"
android:paddingRight="150dip"
/>

但是,当我尝试添加更多TextView时,如下所示:

<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/textViewRight"
android:layout_alignBaseline="@id/textViewRight"
android:text="TextView L"
android:inputType="number|numberSigned"

/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/textViewRight"
android:layout_alignBaseline="@id/textViewRight"
android:text="TextView R"
android:inputType="number"
    />

布局预览屏幕上没有任何变化,并且两个EditTexts不可见。

如何显示最后两个EditTexts?我应该使用边距而不是填充吗?非常感谢任何帮助!

以下是完整的布局文档:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >




<TextView
android:id="@+id/textViewRight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:paddingLeft="150dip"
android:text="Right TextView"
android:layout_alignParentTop="true"
/>
<TextView 
android:id="@+id/textViewLeft"
android:layout_width="wrap_content" 
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Left TextView"
android:layout_alignBaseline="@id/textViewRight"
android:paddingRight="150dip"
/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/textViewRight"
android:layout_alignBaseline="@id/textViewRight"
android:text="TextView L"
android:inputType="number|numberSigned"

/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/textViewRight"
android:layout_alignBaseline="@id/textViewRight"
android:text="TextView R"
android:inputType="number"
    />

</RelativeLayout>

3 个答案:

答案 0 :(得分:1)

我不会说英语,但我可以帮助你....使用此功能...在main.java中自动调整大小

  public class MAIN extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_prueba_js);


     //               (POSX,POSY,WIDTH,HEIGHT, 0 TO 1....
     AutoSizeAndSetXY(TX1, 0.1,  0.1 , 0.3 , 0.3);
     AutoSizeAndSetXY(TX2, 0.5,  0.1, 0.3 , 0.3 );
     AutoSizeAndSetXY(TX3, 0.1,  0.5 , 0.3 , 0.3);
     AutoSizeAndSetXY(TX4, 0.5,  0.5, 0.3 , 0.3 );
}



      public void AutoSizeAndSetXY(View v,double posX,double posY,double width,double height){
   Display display = getWindowManager().getDefaultDisplay();

   int widthP = display.getWidth();
   int heightP = display.getHeight();
   RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
   lp.setMargins(((int)Math.round(posX*widthP)),((int)Math.round(posY*heightP)), 1, 1);
   v.setLayoutParams(lp);
   v.getLayoutParams().height=(int)(Math.round(height*heightP));
   v.getLayoutParams().width=(int)(Math.round(width*widthP));

  }
}

答案 1 :(得分:0)

我认为没有足够的空间将所有这些人添加到一个原始的,特别是手机,而不是平板电脑。

但是如果你想这样做,最好通过水平滚动视图包围你的相对布局,如下面的布局。

也不要仅使用填充或边距将视图推到所需的位置,这实际上被认为是一种糟糕的布局设计。

<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/textViewLeft"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textViewRight"
        android:layout_alignParentLeft="true"
        android:text="Left TextView" />

    <EditText
        android:id="@+id/editTextLeft"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textViewRight"
        android:layout_toRightOf="@id/textViewLeft"
        android:inputType="number|numberSigned"
        android:text="TextView L" />

    <TextView
        android:id="@+id/textViewRight"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/editTextLeft"
        android:text="Right TextView" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@id/textViewRight"
        android:layout_toRightOf="@id/textViewRight"
        android:inputType="number"
        android:text="TextView R" />
</RelativeLayout>

答案 2 :(得分:0)

在这种情况下,我宁愿使用LinearLayout而不是RelativeLayout。并且对于editTexts和textViews使用布局具有相同的宽度:weight =“1”会没问题。 (您可以删除某些视图的权重并将其宽度设置为wrap_content以满足您的需要)

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" 
android:orientation="horizantal">

<TextView
    android:id="@+id/textViewLeft"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    layout_weight="1"
    android:text="Left TextView"/>

<EditText
    android:id="@+id/editTextLeft"
    android:layout_width="0dp"
    android:layout_height="wrap_content" 
    layout_weight="1"
    android:inputType="number|numberSigned"
    android:text="Left EditText" />



<EditText
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    layout_weight="1"
    android:inputType="number"
    android:text="Right EditText"/>

<TextView
    android:id="@+id/textViewRight"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    layout_weight="1"
    android:text="Right TextView" />