2013-02-27 5 views
1

В XML у меня есть представление элемента списка, которое я раздуваю внутри метода getView() моего адаптера для своего ListView. В XML, как я могу сделать свой пользовательский элемент ListView всегда на половину ширины экрана (может быть, добавить и прописку)? Я не думаю, что добавление другого виджета будет работать, как предлагаемые решения, которые я видел, поскольку это элемент списка.Установить элемент ListView на половину ширины экрана в XML

Edit:

Чтобы уточнить, я не думаю, что это проблема с моим кодом XML, но вот что я имею в виду. Если у меня есть пользовательский макет, как это:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:weightSum="1.0" 
    android:paddingTop="10dp" 
    > 

    <ImageView 
     android:id="@+id/item_image" 
     android:layout_width="218dp" 
     android:layout_height="212dp" 
     android:layout_gravity="right" 
     android:adjustViewBounds="true" 

     android:scaleType="fitCenter" 
     android:src="@drawable/..." /> 

</LinearLayout> 

У меня есть жёстко прописанная ширина (который я не думаю, что это лучшая практика), поэтому я хочу, чтобы сделать эту ширину 1/2 от общей ширины экрана. Ясно, что этот XML значительно упрощен, но я надеюсь, что он столкнется с вопросом.

Извините, если у меня отсутствует что-то довольно очевидное.

Edit:

Добавление другого макета, который имеет те же решает эту проблему.

Редактировать 2: Ничего. Я заметил следующее поведение: Если я добавлю другой макет, он надует все, и поэтому я буквально получу половину пустой площади пространства для каждого элемента списка. Я должен сделать верхнюю часть макета половину ширины экрана, я думаю. Как я могу подойти к этому?

+0

http://stackoverflow.com/questions/6094380/android-two-listview-vertically-using-50-50-of-the-screen-height – hakiko

+0

может добавить xml-код custome layout listview –

+0

@hakiko У меня есть отношение ширины 50/50 между двумя ListViews в Activity, но настраиваемый макет, который я раздуваю _, чтобы поместить в каждый элемент item_, обрезается в обоих списках ListView, потому что его ширина составляет более 50% экрана. Это моя проблема. – Kgrover

ответ

2

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/LinearLayout1" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
tools:context=".MainActivity" > 

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

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:orientation="vertical" > 

     <ListView 
      android:id="@+id/listView1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" > 
     </ListView> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:orientation="vertical" > 
    </LinearLayout> 
</LinearLayout> 

itemlist.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<LinearLayout 
    android:id="@+id/root" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="#000000" 
    android:gravity="center" 
    android:orientation="horizontal" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_launcher" /> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Large Text" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 
</LinearLayout> 

MainActivity.java

public class MainActivity extends Activity { 

static final String TAG_NAME = "name"; 
static final String TAG_ID = "id"; 
static String selected = ""; 

ListView listView; 


HashMap<String, String> map; 
ArrayList<HashMap<String,String>> myList; 

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

    myList = new ArrayList<HashMap<String,String>>();  
    listView = (ListView) findViewById(R.id.listView1); 
    fillListView(); 
} 

private void fillListView() { 

    myList.clear(); 

    map = new HashMap<String, String>(); 
    map.put(TAG_ID,"1"); 
    map.put(TAG_NAME, "Name1"); 
    myList.add(map); 

    map = new HashMap<String, String>(); 
    map.put(TAG_ID,"2"); 
    map.put(TAG_NAME, "Name2"); 
    myList.add(map); 

    map = new HashMap<String, String>(); 
    map.put(TAG_ID,"3"); 
    map.put(TAG_NAME, "Name3"); 
    myList.add(map); 

    map = new HashMap<String, String>(); 
    map.put(TAG_ID,"4"); 
    map.put(TAG_NAME, "Name4"); 
    myList.add(map); 

    listView.setAdapter(new MyListAdapter(this, R.layout.itemlist, myList)); 

} 
private class MyListAdapter extends BaseAdapter 
{ 

    private List<HashMap<String,String>> List; 
    private LayoutInflater mInflater; 
    private int layoutresource; 

    public MyListAdapter(Context context,int resource,List<HashMap<String, String>> myList) { 
     List = myList; 
     mInflater = LayoutInflater.from(context); 
     layoutresource = resource; 
    } 

    @Override 
    public int getCount() { 
     return List.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return List.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 

     if (convertView == null) { 
      convertView = mInflater.inflate(layoutresource,null); 
     }  

     final View rootView = convertView.findViewById(R.id.root); 

     ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView1); 
     final TextView name = (TextView) convertView.findViewById(R.id.textView1); 

     imageView.setImageDrawable(getResources().getDrawable(R.drawable.profile)); 
     name.setTextColor(Color.parseColor("#ffffff")); 
     name.setText(List.get(position).get(TAG_NAME)); 

     if (List.get(position).get(TAG_ID).equals(selected)) 
      name.setTextColor(Color.parseColor("#ff0000")); 
     else 
      name.setTextColor(Color.parseColor("#ffffff")); 


     rootView.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       selected = List.get(position).get(TAG_ID); 
       fillListView(); 
      } 
     }); 

     name.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       rootView.performClick(); 
      } 
     }); 

     imageView.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       rootView.performClick(); 
      } 
     }); 

     return convertView; 
    } 
} 

}

+0

. Моя проблема не в основном действии. Он устанавливает ширину пользовательского макета _list item_. – Kgrover

+0

, пожалуйста, проверьте обновленный ответ –

+0

Да, я просто понял это. Тогда я дам вам кредит на ответ. Благодарю. – Kgrover

0

В вашем списке только один вид (изображение). Вы должны иметь половину ширины списка, а не список item.but, если вы действительно хотите получить половину ширины списка, тогда дайте следующий код попробовать , Я надеюсь, что это будет полезно.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    android:weightSum="10" 
    android:gravity="center" 
    android:paddingTop="10dp" 
    > 

    <ImageView 
     android:id="@+id/item_image" 
     android:layout_width="0dp" 
     android:layout_weight="5" 
     android:layout_height="212dp" 
     android:adjustViewBounds="true" 

     android:scaleType="fitCenter" 
     android:src="@drawable/..." /> 

</LinearLayout> 
+0

Я бы хотел сделать это так. Когда я это делаю, я не могу заставить его двигаться в центр. Любое предложение? – Kgrover

+0

Да, просто установите серьезность родительского вида. Посмотрите мой обновленный ответ. –

+0

@ Kgrover: Это работало или нет? –

1

упрощать

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/LinearLayout1" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="horizontal" 
      android:paddingTop="10dp"> 
<ImageView 
     android:id="@+id/item_image" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:layout_height="212dp" 
     android:layout_gravity="right" 
     android:adjustViewBounds="true" 
     android:scaleType="fitCenter" 
     android:background="#FFFFFF" 
     android:src="@drawable/ic_launcher" /> 
<View android:layout_height="0dp" 
     android:layout_width="0dp" 
     android:layout_weight="1"/> 
</LinearLayout> 
Смежные вопросы