Dialog自定义布局展示
来源:互联网 发布:winrar数据解压缩软件 编辑:程序博客网 时间:2024/06/05 10:56
一、Dialog布局实现反馈
1,布局文件 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="266dp" android:focusable="true" android:focusableInTouchMode="true" android:gravity="center_horizontal"> <ScrollView android:id="@+id/scroll_view" android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:layout_width="match_parent" android:layout_height="266dp" android:layout_alignParentBottom="true" android:background="@color/page_bg_color" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:gravity="center" android:text="@string/feed_back_title" android:textColor="@color/comm_dlg_text_color" android:textSize="15sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="3dp" android:gravity="center" android:orientation="horizontal"> <RadioButton android:id="@+id/feed_back_happy_bt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@null" android:button="@null" android:drawablePadding="12dp" android:drawableTop="@drawable/feed_back_happy" android:orientation="vertical" android:paddingTop="12sp" android:text="@string/feed_back_happy" android:textColor="@color/feed_back_selector" /> <RadioButton android:id="@+id/feed_back_normal_bt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="55dp" android:layout_marginRight="55dp" android:background="@null" android:button="@null" android:drawablePadding="12dp" android:drawableTop="@drawable/feed_back_normal" android:orientation="vertical" android:paddingTop="12dp" android:text="@string/feed_back_normal" android:textColor="@color/feed_back_selector" /> <RadioButton android:id="@+id/feed_back_sad_bt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@null" android:button="@null" android:drawablePadding="12sp" android:drawableTop="@drawable/feed_back_sad" android:orientation="vertical" android:paddingTop="12sp" android:text="@string/feed_back_sad" android:textColor="@color/feed_back_selector" /> </LinearLayout> <FrameLayout android:layout_width="match_parent" android:layout_height="67dp" android:layout_marginTop="14dp"> <EditText android:id="@+id/feed_back_saying" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:background="@color/edit_text_bg_color" android:gravity="top|left" android:hint="@string/feed_back_desc" android:paddingLeft="10dp" android:paddingRight="10dp" android:paddingTop="3dp" android:textColorHint="@color/input_hint_color" android:textSize="15dp" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end|bottom" android:layout_marginBottom="9dp" android:layout_marginRight="30dp" android:orientation="horizontal"> <TextView android:id="@+id/feed_back_desc_limit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="0" android:textColor="@color/input_hint_color" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingRight="5dp" android:text="/20" android:textColor="@color/input_hint_color" /> </LinearLayout> </FrameLayout> <Button android:id="@+id/feed_back_submit" android:layout_width="match_parent" android:layout_height="54dp" android:layout_marginTop="10dp" android:background="@color/white" android:enabled="false" android:text="@string/feed_back_submit" android:textColor="@color/submit_selector" /> </LinearLayout> </ScrollView></RelativeLayout>
2,主类实现 MainActivity.java
public void showDialog(View view1) { LayoutInflater inflater = LayoutInflater.from(MainActivity.this); View view = inflater.inflate(R.layout.dialog, null); final Dialog dialog = new Dialog(MainActivity.this, R.style.dialog_theme); // 设置宽度为屏宽, 靠近屏幕底部。 final Window window = dialog.getWindow(); window.setWindowAnimations(R.style.dialog_theme); final WindowManager.LayoutParams lp = window.getAttributes(); lp.gravity = Gravity.BOTTOM; // 紧贴底部 lp.width = WindowManager.LayoutParams.WRAP_CONTENT; lp.height = WindowManager.LayoutParams.WRAP_CONTENT; window.setAttributes(lp); final ScrollView scrollView = (ScrollView) view.findViewById(R.id.scroll_view); final RadioButton happyBt = (RadioButton) view.findViewById(R.id.feed_back_happy_bt); final RadioButton normalBt = (RadioButton) view.findViewById(R.id.feed_back_normal_bt); final RadioButton sadBt = (RadioButton) view.findViewById(R.id.feed_back_sad_bt); final Button submitBt = (Button) view.findViewById(R.id.feed_back_submit); happyBt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { happyBt.setChecked(true); normalBt.setChecked(false); sadBt.setChecked(false); state = 2; submitBt.setEnabled(true); } }); normalBt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { happyBt.setChecked(false); normalBt.setChecked(true); sadBt.setChecked(false); state = 1; submitBt.setEnabled(true); } }); sadBt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { happyBt.setChecked(false); normalBt.setChecked(false); sadBt.setChecked(true); state = 0; submitBt.setEnabled(true); } }); final TextView feedBackLimitTv = (TextView) view.findViewById(R.id.feed_back_desc_limit); final EditText feedBackEt = (EditText) view.findViewById(R.id.feed_back_saying); feedBackEt.postDelayed(new Runnable() { @Override public void run() { InputMethodManager imm = (InputMethodManager) feedBackEt.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(feedBackEt, 0); } }, 200); feedBackEt.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void afterTextChanged(Editable editable) { String desc = feedBackEt.getText().toString(); if (desc.equalsIgnoreCase("")) { feedBackLimitTv.setText("0"); } else { if (desc.length() > 20) { desc = desc.substring(0, 20); feedBackEt.setText(desc); feedBackEt.setSelection(20); feedBackLimitTv.setText("20"); Toast.makeText(MainActivity.this, R.string.feed_back_desc_limit, Toast.LENGTH_LONG).show(); return; } feedBackLimitTv.setText(desc.length() + ""); } } }); submitBt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (NetworkUtil.isNetworkAvailable(MainActivity.this)) { /** * 网络请求 */ String descFeedBack = feedBackEt.getText().toString(); Toast.makeText(MainActivity.this, descFeedBack, Toast.LENGTH_LONG).show(); dialog.dismiss(); } else { Toast.makeText(MainActivity.this, R.string.network_bad, Toast.LENGTH_LONG).show(); } } });// dialog.addContentView(view, new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT)); dialog.addContentView(view, new RelativeLayout.LayoutParams(width, RelativeLayout.LayoutParams.WRAP_CONTENT)); dialog.show(); dialog.setCanceledOnTouchOutside(true); }
3,展示效果
二、细节优化
1,view宽度
(1)
// 设置宽度为屏宽, 靠近屏幕底部。 final Window window = dialog.getWindow(); window.setWindowAnimations(R.style.dialog_theme); final WindowManager.LayoutParams lp = window.getAttributes(); lp.gravity = Gravity.BOTTOM; // 紧贴底部 lp.width = WindowManager.LayoutParams.WRAP_CONTENT; lp.height = WindowManager.LayoutParams.WRAP_CONTENT; window.setAttributes(lp);
设置展示出的控件与物理硬件边框没有距离。
(2)
// dialog.addContentView(view, new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT)); dialog.addContentView(view, new RelativeLayout.LayoutParams(width, RelativeLayout.LayoutParams.WRAP_CONTENT));使用第一种方式,会出现控件左右两边离边框依旧有距离。使用第二种方式,将物理硬件的宽度设置为控件的宽度,实现控件填充整个布局。
2,软键盘位置
在EditText获取焦点时,软件盘会默认弹出。
feedBackEt.postDelayed(new Runnable() { @Override public void run() { InputMethodManager imm = (InputMethodManager) feedBackEt.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(feedBackEt, 0); } }, 200);用于设置控件弹出时,软件盘自动弹出。优化用户操作。
在整体布局外面嵌套ScrollView。在没有嵌套时,Edittext获取焦点,软件盘弹出,会覆盖位于Edittext下部的Button布局。添加布局后,软件盘位置会在整个布局的下部,更符合实际使用的情形。
3,实际效果优化
为EditText添加内容输入监听,便于直观反应当前控件的限制,属于更合理的交互体验。
在研发的路上,最开始,只是基于Android现有的控件,配合基本的业务流程,实现业务。自我追求中,控件的更优化处理与使用;APP的性能与稳定;APP的大小及应用程序框架都是接下来的发展方向。
源码
心中依旧还有一些担忧,对于当前的技术,总是只是实现基本的功能,对于其对应技术的深层,依旧挖掘的不是很深。甚至于,在某些方面,当前实现了,在新的需求下,新的bug,自己或许又会无所适从。对于自己的信心,还是差了很大一截。未来的路,一步步去走~~~
打破自己!
什么时候,或许也可以考虑给自己先一点鼓励~ ~_~ ~_~
0 0
- Dialog自定义布局展示
- 自定义dialog布局展示(关闭按钮突出一块)
- Dialog自定义布局
- 自定义dialog布局
- 自定义Dialog&actionbar布局
- 自定义布局的dialog
- 自定义dialog布局样式
- Android 自定义Dialog(自定义主题、自定义布局
- 自定义dialog的布局样式
- 自定义dialog的布局样式
- 【android控件】dialog自定义布局
- Android自定义dialog的布局
- 自定义dialog的布局样式
- Android dialog 对话框自定义布局
- 自定义Dialog显示布局,位置
- Dialog - 常用类型 & 自定义布局
- Android自定义dialog弹出布局
- Dialog自定义布局的实现
- Android之ViewPager+Fragment实现页面点击切换和手势滑动
- Android Studio快捷键
- Unity层 详解
- 中文CTEX加下划线无法换行问题
- 用Cookie保存登录信息
- Dialog自定义布局展示
- Settings
- 扩展欧几里德算法
- TRANSLATE函数用法
- redis操作
- String.intern()
- Oracle的开机自启动
- WEB表格和表单学习实例
- jsoncpp在vs2012下的环境搭建(C++)