您好我正在尝试将自定义形状和视图应用到我的Android列表视图中。当列表视图中添加了足够的元素时,它必须滚动才能看到所有元素。但如果少于它,则看起来像
<ListView
android:id="@+id/recipe_list_view"
android:layout_width="333dp"
android:layout_height="163dp"
android:layout_marginTop="46dp"
android:background="@drawable/shape"
android:divider="@color/darkblue"
android:dividerHeight="10.0sp"
android:gravity="center"
android:textAlignment="center"
app:layout_constraintLeft_toLeftOf="@+id/constraintLayout2"
app:layout_constraintRight_toRightOf="@+id/constraintLayout2"
app:layout_constraintTop_toBottomOf="@+id/imageView3"></ListView>
这是我可绘制的形状
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#2ECC71"
android:endColor="#2ECC71"
android:angle="270"/>
<corners
android:bottomRightRadius="7dp"
android:bottomLeftRadius="7dp"
android:topLeftRadius="7dp"
android:topRightRadius="7dp"/>
</shape>
这是实现列表视图的代码
mListView = (ListView) findViewById(R.id.listView);
String[] listItems = new String[listOfUserIds.size()];
for(int i = 0; i < users.size(); i++){
listItems[i] = users.get(i);
}
ArrayAdapter adapter = new ArrayAdapter(EventDetailsActivity.this, android.R.layout.simple_list_item_1, listItems);
mListView.setAdapter(adapter);
这是有足够元素滚动时的样子
答案 0 :(得分:1)
您为listView提供了背景,列表视图高度为....
var api = new ParseServer({
databaseURI: databaseUri || 'mongodb://localhost:27017/dev',
cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
appId: process.env.APP_ID || 'myAppId',
masterKey: process.env.MASTER_KEY || 'myMasterKey', //Add your master key here. Keep it secret!
serverURL: process.env.SERVER_URL || 'http://localhost:1337/parse', // Don't forget to change to https if needed
clientKey: '', <=== possibly not needed, just to be sure
liveQuery: {
classNames: ["Scores", "Posts", "Comments"] // List of classes to support for query subscriptions
}
});
,因此如果只有少数项目,则不会填充整个布局。所以你可以看到背景。解决方案是提供163dp
而不是给出固定高度,而不是给列表背景,你应该给列表项。
答案 1 :(得分:0)
Muthukrishnan的答案在技术上是正确的,但它似乎并没有真正解决“我怎么能有ListView
圆角?”的问题。
正如他所说,您应该从ListView
标记中删除背景,而是将背景应用于项目视图。如果你这样做,你将(a)有一个方形列表视图或(b)在每个项目上都有圆角。
不幸的是,没有很好的方法可以在ListView
处提供圆角但不提供背景。
我能想到的最佳解决方案是在View
上叠加第二个ListView
并使用此视图绘制圆角。我使用了一个矢量drawable来做到这一点。
这是一个非常简单的应用程序,显示了这一点。
<强> activity_main.xml中强>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#777">
<FrameLayout
android:layout_width="333dp"
android:layout_height="163dp"
android:layout_gravity="center">
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#00ffffff"
android:dividerHeight="10dp"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:srcCompat="@drawable/fake_rounded_corners"/>
</FrameLayout>
</FrameLayout>
<强> itemview.xml 强>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="48dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:gravity="center_vertical"
android:textColor="@color/colorPrimary"
android:textSize="18sp"
android:background="#fff"/>
<强> fake_rounded_corners.xml 强>
<vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:width="333dp"
android:height="163dp"
android:viewportWidth="333.0"
android:viewportHeight="163.0">
<path
android:fillColor="#777"
android:pathData="M0 7v-7h7a7 7 0 0 0 -7 7"/>
<path
android:fillColor="#777"
android:pathData="M326 0h7v7a7 7 0 0 0 -7 -7"/>
<path
android:fillColor="#777"
android:pathData="M333 156v7h-7a7 7 0 0 0 7 -7"/>
<path
android:fillColor="#777"
android:pathData="M0 156v7h7a7 7 0 0 1 -7 -7"/>
</vector>