【问题标题】:Rounding top and bottom corners of a listview舍入列表视图的顶角和底角
【发布时间】:2016-02-24 16:52:14
【问题描述】:

这是我的问题,我似乎无法将列表视图底部的边缘变圆。

我已经尝试了几种方法,您可以在其中为 backgroup 资源创建形状,尝试编程盟友和布局 xml,但它根本没有做任何事情。

就像我做错了,我怀疑因为我熟悉形状,或者其他东西干扰了我的尝试。

无论哪种方式,我都需要帮助。

这是构成您正在查看的内容的一些 xml。

这构成了实际的对话框。 (settings_dialog.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="#BB000000"
                android:gravity="center">

    <ImageView
        style="@style/CloseButtonStyle"
        android:id="@+id/ivCancel_SD"
        android:layout_width="75dp"
        android:layout_height="75dp"
        android:layout_above="@+id/rlContainer_SD"
        android:layout_toRightOf="@+id/rlContainer_SD"
        android:layout_toEndOf="@+id/rlContainer_SD"/>

    <RelativeLayout
        style="@style/SettingsDialogStyle"
        android:id="@+id/rlContainer_SD"
        android:layout_width="800dp"
        android:layout_height="600dp"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true">

        <TextView
            style="@style/SettingsHeaderStyle"
            android:id="@+id/tvSettingsLabel_SD"
            android:layout_width="330dp"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:text="@string/sd_header_label"/>


               <ListView
        style="@style/SettingsListStyle"
        android:id="@+id/lvOptions_SD"
        android:background="@drawable/bg_listview_corners"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tvSettingsLabel_SD"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"/>

    </RelativeLayout>

</RelativeLayout>

这位于我的 styles.xml 中,还有一堆与此无关的其他内容。

<style name="SettingsListStyle">
    <item name="android:divider">@color/table_divider_color</item>
    <item name="android:dividerHeight">1dp</item>
    <item name="android:paddingTop">40dp</item>
    <item name="android:paddingLeft">6dp</item>
    <item name="android:paddingRight">6dp</item>
    <item name="android:paddingBottom">2dp</item>
</style>

这构成了一个 list_item。 (settings_list_item.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="80dp"
                android:padding="5dp">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            style="@style/SettingsOptionNameStyle"
            android:id="@+id/tvOptionName_SLI"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>

        <TextView
            style="@style/SettingsOptionDescStyle"
            android:id="@+id/tvOptionDesc_SLI"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>

    </LinearLayout>


</RelativeLayout>

这是我用来尝试圆边的形状。

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/bg_listview_corners" android:shape="rectangle"> 
    <corners android:radius="30dp" />
</shape> 

我也试过这个形状。

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/bg_listview_corners" android:shape="rectangle"> 
        <corners 
         android:bottomRightRadius="30dp" 
         android:bottomLeftRadius="30dp" />
</shape> 

这是我认为您在路上需要帮助的所有信息。 如果我错过了一些信息,或者您只是有问题,请不要犹豫。

更新 1: 我发现它只是塑造了列表视图的容器,而不是列表视图本身。
有什么想法吗?

【问题讨论】:

  • 尝试从底部和顶部为您的 ListView 提供更多填充
  • 你在哪里设置形状?
  • settings_dialog.xml 中列表视图中的@Opiatefuchs
  • 你能发这个吗?
  • @Opiatefuchs 查看最上面的代码片段,我在 listview 元素中调用背景。我还添加了另一个代码片段,这是我的形状

标签: android xml android-layout listview


【解决方案1】:
  • 可以增加内边距(paddingRight、paddingLeft 和 paddingBottom)

    <style name="SettingsListStyle">
    <item name="android:divider">@color/table_divider_color</item>
    <item name="android:dividerHeight">1dp</item>
    <item name="android:paddingTop">40dp</item>
    <item name="android:paddingLeft">7dp</item>
    <item name="android:paddingRight">7dp</item>
    <item name="android:paddingBottom">3dp</item>
    

  • 或在列表视图上使用蒙版背景(例如 Post 使用 9-Patch 作为蒙版,或者您可以使用“bg_listview_corners.xml”背景作为蒙版)

【讨论】:

  • 填充无法正常工作,因为这会弄乱列表与布局其余部分的对齐方式。我最终用面具解决了它,谢谢你的提示。
【解决方案2】:

您可以在您的可绘制文件夹中创建一个名为 custom_list.xml 的自定义背景可绘制选择器文件,其中包含此代码

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@drawable/list_pressed" android:state_pressed="true"/>
<item android:drawable="@drawable/list_focused" android:state_focused="true"/>
<item android:drawable="@drawable/list_default"/>

</selector>

然后在您的可绘制文件夹中创建另一个文件 list_default.xml,其中包含此代码

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >

<gradient
    android:angle="270"
    android:endColor="#1c95a0"
    android:startColor="#1c95a0" />
<corners android:radius="5dip" />

</shape>

最后将列表视图的背景属性设置为

android:background="@drawable/custom_list"

【讨论】:

    【解决方案3】:

    最终使用@Sally 建议的掩码,这就是我更改它的方式。

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="#BB000000"
                    android:gravity="center">
    
        <ImageView
            style="@style/CloseButtonStyle"
            android:id="@+id/ivCancel_SD"
            android:layout_width="75dp"
            android:layout_height="75dp"
            android:layout_above="@+id/rlContainer_SD"
            android:layout_toRightOf="@+id/rlContainer_SD"
            android:layout_toEndOf="@+id/rlContainer_SD"/>
    
        <RelativeLayout
            style="@style/SettingsDialogStyle"
            android:id="@+id/rlContainer_SD"
            android:layout_width="800dp"
            android:layout_height="600dp"
            android:layout_centerVertical="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true">
    
            <TextView
                style="@style/SettingsHeaderStyle"
                android:id="@+id/tvSettingsLabel_SD"
                android:layout_width="330dp"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:text="@string/sd_header_label"/>
    
    
            <ListView
                style="@style/SettingsListStyle"
                android:id="@+id/lvOptions_SD"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/tvSettingsLabel_SD"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"/>
    
        </RelativeLayout>
    
            <ImageView
                android:layout_width="800dp"
                android:layout_height="600dp"
                android:layout_centerVertical="true"
                android:background="@drawable/bg_listview_corners"/>
    
    </RelativeLayout>
    

    我在与容器匹配的相对布局之上添加了一个ImageView。 这是我用来屏蔽布局的drawable。(bg_listview_corners.xml)

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
            <item>
            <shape android:shape="rectangle" >
                <stroke
                    android:width="12dp"
                    android:color="@color/app_night_sky_color" />
                <padding android:left="6px"
                android:top="6px"
                android:right="6px"
                android:bottom="6px"/>
    
                <corners android:radius="30dp" />
            </shape>
        </item>
        <item>
            <shape xmlns:android="http://schemas.android.com/apk/res/android" >
    
                <stroke
                    android:width="6dp"
                    android:color="@color/popup_bg_color" />
    
                <corners android:radius="30dp" />
            </shape>
        </item>
    </layer-list>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-14
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多