0

在我的应用程序中,我有一个表单,用户输入他/她的地址。我有几个EditTexts来输入城市,州和邮编的信息。我有一个字段国家的线性布局,由Country Picker取代。显示下拉菜单,但拉伸线性布局会使窗体看起来很糟糕。我一直无法让它看起来很好。有时,如果我进行更改,下拉菜单不会显示。请帮助我,因为我是构建Android应用程序的初学者。调整布局文件,使表单看起来更好

这里是布局的XML文件的一部分:

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout android:id="@+id/Rlayout_recipient" 
    android:layout_width="match_parent" android:layout_height="match_parent" 
    android:layout_below="@id/top_bar_view" android:background="@drawable/bg"> 

    <EditText android:id="@+id/edt_rec_addr1" 
     android:layout_width="400dp" android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/edt_rec_name" 
     android:layout_alignRight="@+id/edt_rec_name" android:layout_below="@+id/edt_rec_name" 
     android:layout_marginTop="15dp" android:background="@drawable/border_email" 
     android:ems="10" android:hint="@string/addr1_hint" android:inputType="text" 
     android:padding="6dp" android:textColor="#FFFFFF" 
     android:textColorHint="#FFFFFF" /> 

    <EditText android:id="@+id/edt_rec_name" 
     android:layout_width="400dp" android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" android:layout_centerHorizontal="true" 
     android:layout_marginTop="22dp" android:background="@drawable/border_email" 
     android:ems="10" android:hint="@string/name_hint" android:inputType="text" 
     android:padding="6dp" android:textColor="#FFFFFF" 
     android:textColorHint="#FFFFFF" /> 

    <LinearLayout android:id="@+id/addr_layout" 
     android:layout_width="400dp" android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/edt_rec_addr2" 
     android:layout_alignParentBottom="true" android:layout_marginBottom="16dp" 
     android:background="@drawable/border_email"> 

     <EditText android:id="@+id/edt_rec_city" 
      android:layout_width="70dp" android:layout_height="wrap_content" 
      android:ems="10" android:hint="@string/city_hint" android:inputType="text" 
      android:padding="6dp" android:textColor="#FFFFFF" 
      android:textColorHint="#FFFFFF" /> 

     <EditText android:id="@+id/edt_rec_state" 
      android:layout_width="70dp" android:layout_height="wrap_content" 
      android:ems="10" android:hint="@string/state_hint" 
      android:inputType="text" android:padding="6dp" android:textColor="#FFFFFF" 
      android:textColorHint="#FFFFFF" /> 

     <EditText android:id="@+id/edt_rec_postcode" 
      android:layout_width="105dp" android:layout_height="wrap_content" 
      android:ems="10" android:hint="@string/postcode_hint" 
      android:inputType="number" android:padding="6dp" android:textColor="#FFFFFF" 
      android:textColorHint="#FFFFFF" /> 

     <LinearLayout android:id="@+id/country_layout" 
      android:layout_width="150dp" android:layout_height="wrap_content" 
      android:layout_marginRight="20dp" android:orientation="vertical" 
      android:weightSum="1" /> 


    </LinearLayout> 

    <EditText android:id="@+id/edt_rec_addr2" 
     android:layout_width="400dp" android:layout_height="wrap_content" 
     android:layout_above="@+id/addr_layout" android:layout_alignLeft="@+id/edt_rec_addr1" 
     android:layout_marginBottom="17dp" android:background="@drawable/border_email" 
     android:ems="10" android:hint="@string/addr2_hint" android:inputType="text" 
     android:padding="6dp" android:textColor="#FFFFFF" 
     android:textColorHint="#FFFFFF" /> 
</RelativeLayout> 

这是该活动的Java代码:

public class RecipientAddressActivity extends FragmentActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_recipient_address);   
    FragmentManager manager = getSupportFragmentManager(); 
    FragmentTransaction transaction = manager.beginTransaction(); 

    CountryPicker picker = new CountryPicker(); 
    picker.setListener(new CountryPickerListener() { 

     @Override 
     public void onSelectCountry(String name, String code) { 
      Toast.makeText(
        RecipientAddressActivity.this, 
        "Country Name: " + name + " - Code: " + code 
            + " - Currency: " 
            + CountryPicker.getCurrencyCode(code), 
        Toast.LENGTH_SHORT).show(); 

     } 
    }); 

    transaction.replace(R.id.country_layout, picker); 
    transaction.commit(); 

} 

这里是截图的链接它的外观

enter image description here

,它应该是怎样看:

enter image description here

请,请帮助我。

回答

0

解决了这个问题,通过用edittext和打开国家选择器的click事件替换线性布局。

edt_ctry = (EditText) findViewById(R.id.edt_ctry); 
    edt_ctry.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      showCountryPicker(); 

     } 
    }); 

protected void showCountryPicker() { 
    final CountryPicker picker = CountryPicker.newInstance("Select Country"); 
    picker.setListener(new CountryPickerListener() { 

     @Override 
     public void onSelectCountry(String name, String code) { 
      edt_ctry.setText(name); 
      picker.dismiss(); 
     } 
    }); 

    picker.show(getSupportFragmentManager(), "COUNTRY_PICKER"); 

} 
0

它更好地使用垂直方向的线性布局。我已经更改了一些代码套件您的要求:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/Rlayout_recipient" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_below="@id/top_bar_view" 
    android:orientation="vertical" 
    android:background="@drawable/bg" > 

    <EditText 
     android:id="@+id/edt_rec_addr1" 
     android:layout_width="400dp" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/edt_rec_name" 
     android:layout_alignRight="@+id/edt_rec_name" 
     android:layout_below="@+id/edt_rec_name" 
     android:layout_marginTop="15dp" 
     android:background="@drawable/border_email" 
     android:ems="10" 
     android:hint="@string/addr1_hint" 
     android:inputType="text" 
     android:padding="6dp" 
     android:textColor="#FFFFFF" 
     android:textColorHint="#FFFFFF" /> 

    <EditText 
     android:id="@+id/edt_rec_name" 
     android:layout_width="400dp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:background="@drawable/border_email" 
     android:ems="10" 
     android:hint="@string/name_hint" 
     android:inputType="text" 
     android:padding="6dp" 
     android:textColor="#FFFFFF" 
     android:textColorHint="#FFFFFF" /> 

    <LinearLayout 
     android:id="@+id/addr_layout" 
     android:layout_width="400dp" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/edt_rec_addr2" 
     android:layout_alignParentBottom="true" 
     android:layout_marginBottom="16dp" 
     android:background="@drawable/border_email" > 

     <EditText 
      android:id="@+id/edt_rec_city" 
      android:layout_width="70dp" 
      android:layout_height="wrap_content" 
      android:ems="10" 
      android:hint="@string/city_hint" 
      android:inputType="text" 
      android:padding="6dp" 
      android:textColor="#FFFFFF" 
      android:textColorHint="#FFFFFF" /> 

     <EditText 
      android:id="@+id/edt_rec_state" 
      android:layout_width="70dp" 
      android:layout_height="wrap_content" 
      android:ems="10" 
      android:hint="@string/state_hint" 
      android:inputType="text" 
      android:textColor="#FFFFFF" 
      android:textColorHint="#FFFFFF" /> 

     <EditText 
      android:id="@+id/edt_rec_postcode" 
      android:layout_width="105dp" 
      android:layout_height="wrap_content" 
      android:ems="10" 
      android:hint="@string/postcode_hint" 
      android:inputType="number" 
      android:padding="6dp" 
      android:textColor="#FFFFFF" 
      android:textColorHint="#FFFFFF" /> 

     <LinearLayout 
      android:id="@+id/country_layout" 
      android:layout_width="150dp" 
      android:layout_height="wrap_content" 
      android:layout_marginRight="20dp" 
      android:orientation="vertical" 
      android:weightSum="1" /> 
    </LinearLayout> 

    <EditText 
     android:id="@+id/edt_rec_addr2" 
     android:layout_width="400dp" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/addr_layout" 
     android:layout_alignLeft="@+id/edt_rec_addr1" 
     android:layout_marginBottom="17dp" 
     android:background="@drawable/border_email" 
     android:ems="10" 
     android:hint="@string/addr2_hint" 
     android:inputType="text" 
     android:textColor="#FFFFFF" 
     android:textColorHint="#FFFFFF" /> 

</RelativeLayout> 

希望它有帮助。

+0

使用线性布局,您不能在上图中显示android:layout_alignLeft,layout_alignRight,below,above等元素。 – user2688158

+0

您可以将它们移除,因为它们在线性布局中不起作用。尝试使用重量,重力或layout_gravity来调整组件。 –

+0

感谢您的回复。使用线性布局不会有帮助,它是一样的。我想知道如果我可以让国家成为EditText,并且在它的触摸事件中我打开了国家选择器。如果您对此有任何建议,请告知我。谢谢。 – user2688158

相关问题