2013-10-09 54 views
0

我想允许我的ListView被打包到其宽度的内容并使其与父中心对齐。Listview动态分配宽度

这是一个正常的ListView是给我

这几乎是我想要达到的,只是我想通过的ListView ListView中最长的测试包。目前,这是通过声明DP这是我想避免实现可能的话

有的为第一图像代码:

<ListView 
      android:id="@+id/lst_test" 
      android:layout_width="0dip" 
      android:layout_weight="1" 
      android:layout_height="wrap_content" > 
     </ListView> 

的第二图像部分代码:

<ListView 
    android:id="@+id/lst_test" 
    android:layout_width="200dp" 
    android:layout_height="wrap_content" > 
</ListView> 

我必须使用自定义适配器吗?或者我可以坚持使用当前的适配器?如果我需要使用自定义适配器,我该如何去做这件事?

+0

请参考http://stackoverflow.com/questions/9483788/center-text-in-a-listview – Azi

+0

发布您的布局,其中包含ListView –

回答

1

您不需要创建自定义适配器。这是一个可以帮助你的例子。

public class MainActivity extends Activity { 

    HashMap <String, CheckBox> options = new HashMap<String, CheckBox>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ListView list_view = (ListView) findViewById(R.id.listView1); 

     ArrayList<String> str = new ArrayList<String>(); 
     for (int i = 0; i < 10; i++) { 
      str.add("Example " + i); 
     } 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_layout, R.id.textView1, str); 
     list_view.setAdapter(adapter); 
    } 
} 

上面我创建了一个活动,其中我使用ArrayAdapter获取listview和设置数据。

我创建了两种布局:

第一个布局:包含listview。 第二个布局:包含需要显示的textview。

对齐Listview中心数据的主要逻辑是需要将textview的引力设置为中心。

您可以根据自己的需要管理第二个布局。

这是我的第一个XML布局:

<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" > 

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

</RelativeLayout> 

这里是我的第二个布局:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/RelativeLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:gravity="center" 
     android:text="TextView" /> 

</RelativeLayout> 

如果您仍然面临任何问题,那么你可以问。如果您需要更多的灵活性,那么您可以通过继承ArrayAdapter类来创建自定义适配器。

这是自定义适配器的例子:How do I link a checkbox for every contact in populated listview?

希望它会帮助你。

+0

感谢您的解决方案。他们都是伟大的。我设法让你的帮助工作,我只是一个问题。如果我需要一些灵活的列表视图来包装其宽度(不匹配),我还需要一个自定义适配器吗?我只希望用户能够点击文本,但不能点击文本左右的空白区域。 – thhVictor

+0

我还没有尝试,但我认为在这种情况下,你应该去自定义适配器,并在getView中,你应该为你的textview添加onclicklistner。自定义适配器非常灵活,您可以根据自己的需求随时更改它们。今天,如果您将按照您的要求实现您的列表视图,并且稍后您需要更改或添加一些视图,那么您将再次执行所有操作。所以如果你觉得可以进一步改变,那么你应该使用自定义适配器。 –

+0

好的谢谢你的提示。这就是我现在需要的。 – thhVictor