内容简介:DialogFragment的xml布局:DialogFragment类代码:在不做任何处理的前提下,运行效果如下。
一、现象
DialogFragment的xml布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/shape_dialog_fragment_message_forward" android:orientation="vertical"> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:layout_marginEnd="15dp" android:layout_marginStart="15dp" android:layout_marginTop="15dp" android:text="@string/detail" android:textColor="#333333" android:textSize="17sp" /> <android.support.v7.widget.RecyclerView android:id="@+id/previewList" android:layout_width="match_parent" android:layout_height="30dp" android:layout_marginBottom="10dp" android:layout_marginEnd="15dp" android:layout_marginStart="15dp" tools:listitem="@layout/item_forward_info_preview" /> <View android:id="@+id/dividerUpper" android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginEnd="15dp" android:layout_marginStart="15dp" android:background="#d9d9d9" /> <FrameLayout android:id="@+id/viewContainer" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginEnd="2dp" android:layout_marginStart="2dp" /> <EditText android:id="@+id/leavedMessage" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginEnd="15dp" android:layout_marginStart="15dp" android:background="@drawable/bg_file_space_search" android:gravity="center_vertical" android:hint="@string/leaved_msg" android:inputType="text" android:paddingEnd="8dp" android:paddingStart="8dp" android:textColor="#333333" android:textSize="14sp" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginEnd="1dp" android:layout_marginStart="1dp" android:layout_marginTop="20dp" android:background="#d9d9d9" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="1dp" android:layout_marginEnd="1dp" android:layout_marginStart="1dp"> <View android:id="@+id/hook" android:layout_width="1dp" android:layout_height="wrap_content" android:layout_alignBottom="@+id/btnCancel" android:layout_alignTop="@+id/btnCancel" android:layout_centerHorizontal="true" android:background="#d9d9d9" /> <Button android:id="@+id/btnCancel" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toStartOf="@+id/hook" android:background="@drawable/selector_dialog_fragment_message_button_left" android:text="@string/cancel" android:textColor="#222222" android:textSize="17sp" /> <Button android:id="@+id/btnConfirm" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toEndOf="@+id/hook" android:background="@drawable/selector_dialog_fragment_message_button_right" android:text="@string/confirm" android:textColor="#222222" android:textSize="17sp" /> </RelativeLayout> </LinearLayout>
DialogFragment类代码:
class CustomFragment : DialogFragment() { val data = ArrayList<Item>().apply { add(Item(R.drawable.baidu, "Baidu")) add(Item(R.drawable.alibaba, "Alibaba")) add(Item(R.drawable.qq, "Tencent")) } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { super.onCreateView(inflater, container, savedInstanceState) return inflater.inflate(R.layout.dialog_forward, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val adapter = ItemAdapter(context!!) itemsListView.layoutManager = LinearLayoutManager(context).apply { orientation = LinearLayoutManager.HORIZONTAL } itemsListView.adapter = adapter adapter.setData(data) val v = layoutInflater.inflate(R.layout.view_forward_text, viewContainer, true) v.findViewById<TextView>(R.id.text).text = "[文本] 三间中国科技公司" } }
在不做任何处理的前提下,运行效果如下。
显然布局全部被挤在一起,没有达到 android:layout_width=”match_parent” 的要求
下面针对这个问题介绍两种处理方法。
二、方法一
这种方法最简单,设置一个 style 。
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setStyle(DialogFragment.STYLE_NO_TITLE, android.R.style.Theme_Holo_Light_Dialog_MinWidth) }
设置效果如下,布局宽度会自动延伸,并在左右两侧保留一定边距。从 DialogFragment.STYLE_NO_TITLE 可知样式配置为不使用标题。
三、方法二
通过计算决定Window布局宽度。这种方法相比方法一具备一定灵活性,可以自定义两侧保留边距。
override fun onStart() { super.onStart() val dm = DisplayMetrics() activity?.windowManager?.defaultDisplay?.getMetrics(dm) dialog.window?.setLayout(((dm.widthPixels * 0.9).toInt()), ViewGroup.LayoutParams.WRAP_CONTENT) }
从代码可知,布局宽度设置为屏幕总宽度90%,剩下10%宽度被均分到两侧作为边距。或者,通过设计稿对两侧保留边距的像素密度,亦可反向计算主布局所需比例。
四、移除标题
需要注意的是,由于方法二没有设置关于 title 的参数,所以上图的布局上方出现了一块空白区,需要定义 Window 的特性移除标题。
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { super.onCreateView(inflater, container, savedInstanceState) dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) return inflater.inflate(R.layout.dialog_forward, container, false) }
设置效果图:
五、背景透明
由于背景默认非透明,设置了圆角后边距会有非透明的区域。通过以下代码配置,可与移除标题的代码同时使用:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { super.onCreateView(inflater, container, savedInstanceState) dialog.window?.setBackgroundDrawableResource(android.R.color.transparent) return inflater.inflate(R.layout.dialog_forward, container, false) }
设置效果图:
以上所述就是小编给大家介绍的《Android 自定义DialogFragment宽度控制》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Egret 5.4.1 版本发布,修复文本输入、自定义字体宽度异常等问题
- 测试图片宽度
- <input> 宽度自适应变化
- 零宽度字符:和谐?屏蔽?不存在的
- html – 为什么忽略表宽度?
- 超过制定宽度(或行数)显示...(或省略)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Design Accessible Web Sites
Jeremy Sydik / Pragmatic Bookshelf / 2007-11-05 / USD 34.95
It's not a one-browser web anymore. You need to reach audiences that use cell phones, PDAs, game consoles, or other "alternative" browsers, as well as users with disabilities. Legal requirements for a......一起来看看 《Design Accessible Web Sites》 这本书的介绍吧!