在带有边距的布局中使用带有 headers 的列表视图

Use list view with headers in a layout with margins

我刚开始学习一点 Android。我目前正在尝试将列表视图与 headers 部分一起使用。我在这个网站上找到了这个可重复使用的代码:

http://javatechig.com/android/listview-with-section-header-in-android

它使用两个布局文件:snippet_item1.xmlsnippet_item2.xml

结果如下所示:

我希望此页面距顶部有 100dp 的边距。我已尝试将 margin_top 和填充添加到两个 xml 文件,但我没有得到想要的结果。

你怎么看?

让我post回答这个问题。不过,我不知道 ListActivity 是否可行。

查看 http://developer.android.com/reference/android/app/ListActivity.html 了解更多详情。

ListActivityListView 添加到 ID 为 list 的布局。您可以尝试获取该列表并以编程方式添加边距。

@Override
public void onCreateView(...) {
    // set stuff up

    ListView lv = getListView();
    // set margin to lv
}

以编程方式设置 padding/margin 有点棘手,因为您必须将像素作为参数传递,但您需要 dp。但是您可以使用 getResources().getDimensionPixelSize(R.style.youMarginStuffHere) 来处理它。只需将边距添加到您的 style.xml.

不是从 ListActivity 扩展,而是从一个简单的 Activity 扩展您的 class 并在那个 activity 中放置一个 ListView,您可以给边距和填充列表显示。只需使用您已经通过 ListView 创建的相同适配器。方法如下。 这是你的 activity 的布局文件,命名为 activity_list.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
         xmlns:android="http://schemas.android.com/apk/res/android"
         android:orientation="vertical"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:background="#fff">
    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:marginTop="20sp"
        android:marginBottom="10sp"
        android:divider="@android:color/transparent"
        android:id="@+id/listview"
        android:padding="5sp"
        android:dividerHeight="5.0sp"
     ></ListView>
    </RelativeLayout>

现在在 Java 中创建一个 Activity。

    public class MyListActivity extends Activity {
         private ListView listView;
         private MyAdapter myAdapter;
         protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_list);
              this.listView = (ListView) findViewById(R.id.listview);
              this.myAdapter = new MyAdapter(getApplicationContext());
              //add whatever you want to add to your adapter
              listView.setAdapter(myAdapter);
         }
    }

希望这能解决您的问题!