我目前正在尝试使用5x5网格创建基于收银机的应用程序以显示所有菜单我用GridLayout和CardView来显示它们。 1个带有linearLayout + Imageview + TextView的CardView总共产生了4个视图,因此5x5 cardview使我的xml最终获得了100个视图...
我试图在cardview内为linearlayout + imageview + textview使用include标签,这将视图降低到50viewsonly?但是现在的问题是..我想更改include标签内的文本和图像src,否则我无法显示所有菜单图像。这有可能吗?
对我的问题有什么建议吗?
<android.support.v7.widget.CardView
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:layout_marginBottom="16dp"
android:layout_marginStart="16dp"
app:cardPreventCornerOverlap="true"
app:cardElevation="8dp"
app:cardCornerRadius="8dp">
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:weightSum="100"
android:orientation="vertical"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:layout_gravity="center"
android:layout_weight="70"
android:src="@drawable/noimage"
android:contentDescription="@string/logo" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textSize="18sp"
android:textColor="#A9A9A9"
android:layout_weight="30"
android:textAlignment="center"
android:autoSizeTextType="uniform"
android:text="@string/logo"/>
</LinearLayout>
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:layout_marginBottom="16dp"
android:layout_marginStart="16dp"
app:cardPreventCornerOverlap="true"
app:cardElevation="8dp"
app:cardCornerRadius="8dp">
<include layout="@layout/menu_cardview"/>
</android.support.v7.widget.CardView>
我认为目前无法实现,但是您可以采取的减少/优化xml代码的方法是第一种选择:
仅在GridLayout中使用TextView,对于它们上方的图像,请不要使用单独的ImageView,请在TextViews android:drawabkeTop="drawable/image
中使用此>
第二个选项:
第二个选项也可以与第一个选项一起使用。使用样式来设置布局样式示例:
<style name="gridImageStyle"> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> <item name="android:src">@drwable/image</item> </style> <style name="gridTextStyle"> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> <item name="android:textSize">20sp</item> <item name="android:textColor">20sp</item> </style>
并像这样在您的TextView和ImageView中使用它
<TextView style="@style/gridTextStyle" android:text="EnterTextHere"/> <ImageView style="@style/gridImageStyle" android:src="Enter Image Source here"/>
但是,我建议您在TextView中使用
android:drawableTop:"ImageSource"
而不是ImageView