Android开发中UI相关的问题总结
UI设计和实现是Android开发中必不可少的部分,UI做不好的话,丑到爆,APP性能再好,估计也不会有多少人用吧,而且如果UI和业务代码逻辑中间没有处理好,也会很影响APP的性能的。稍微总结一下,开发中遇到的一些UI相关的问题,以及解决的方法,提供给有需要的人。
1,Android全屏显示
方法:requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
2,visibility属性VISIBLE、INVISIBLE、GONE的区别
设置方法:
XML文件:android:visibility="visible"
Java代码:view.setVisibility(View.VISIBLE);
区别:
VISIBLE:设置控件可见。
INVISIBLE:设置控件不可见。保留控件占有的布局空间。
GONE:设置控件隐藏。不保留控件占有的布局空间。
3,创建带图标的右上角下拉菜单项(类似微信扫一扫菜单项)
/** *创建菜单 */
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(Menu.NONE, Menu.FIRST+1, 0, getResources().getString(R.string.scan_menu_text)).setIcon(R.drawable.scan_icon_24);
return true;
}
/**
* 利用反射机制调用MenuBuilder的setOptionalIconsVisible方法设置mOptionalIconsVisible为true,给菜单设置图标时才可见
* 让菜单同时显示图标和文字
* @param featureId
* @param menu
* @return
*/
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
if (menu != null) {
if (menu.getClass().getSimpleName().equalsIgnoreCase("MenuBuilder")) {
try {
Method method = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
method.setAccessible(true);
method.invoke(menu, true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return super.onMenuOpened(featureId, menu);
}
/**
*菜单的点击事件
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) { super.onOptionsItemSelected(item);
switch (item.getItemId()){
case Menu.FIRST+1:
Intent intent = new Intent(RIWarehouseActivity.this, CaptureActivity.class); startActivityForResult(intent, Constant.REQ_QR_CODE);
break;
default: break;
}
return true;
}
4,给控件添加边框样式
在drawable目录添加border_style.xml文件
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke android:width="1dp" android:color="#999999"/>
<solid android:color="@android:color/transparent"/>
<corners android:radius="2dp"></corners>
</shape>
在控件的布局属性中加上android:background="@drawable/border_style"就可以啦。
5,修改Spinner默认样式
创建custom_spinner_item_layout.xml文件
<?xml version="1.0" encoding="utf-8"?>
<!--spinner展开后的Item布局-->
<TextView android:id="@+id/spinner_textView" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:padding="3dp" android:textSize="8pt" android:layout_margin="5dp" android:textColor="@color/colorSimpleBlack"></TextView>
activity中使用:
arrAdapter = new ArrayAdapter<String>(ScanFirstActivity.this, R.layout.custom_spinner_item_layout, storageDeptsList);storageDeptSpinner.setAdapter(arrAdapter);
6,TextView加下划线效果
资源文件里:
<resources>
<string name="hello"><u>phone:0123456</u></string>
</resources>
代码里:
TextView textView = (TextView)findViewById(R.id.tv_test); textView.setText(Html.fromHtml("<u>"+"0123456"+"</u>"));
或者
textView.getPaint().setFlags(Paint. UNDERLINE_TEXT_FLAG ); //下划线 textView .getPaint().setAntiAlias(true);//抗锯齿
7,切换到中英文之后,页面白板的问题
原因:文字过长,超出页面,导致整个页面无法刷新出来。修改文字长度就可以。
8,页面整体滚动以及出现的问题
方法:在布局外面上加上ScrollView。使其适应父控件,即填满屏幕。当里面的内容不超过一屏的时候,不可滚动;当内容超过一屏的时候,可以滚动。
会出现的问题是:ScrollView can host only one direct child。
原因:ScrollView 只能有一个直接子布局。
解决方法:讲多个子布局包裹在一个布局里面,再把这个布局作为ScrollView的子布局。
9,Dialog Unable to add window -- token null is not for an application错误的解决方法
AlertDialog dialog = new AlertDialog.Builder(context, R.style.Dialog).create();
参数context不能使用全局的application,必须使用当前activity的context。
10,Android自定义View之PopupLayout
使用的时候,基于这个弹出框,在上面布局:
代码里使用:
View view=View.inflate(LoginActivity.this,R.layout.popup_fill_host_layout,null);
popupLayout=PopupLayout.init(LoginActivity.this,view);
popupLayout.setUseRadius(true);popupLayout.setWidth(350,true);
popupLayout.setHeight(300,true);
popupLayout.show(PopupLayout.POSITION_CENTER);
//绑定控件
hostPortEdit = view.findViewById(R.id.hostPortEdit);
hostPortEdit.setText(PreferenceUtil.getPreference(getApplication(),"Host"));
hostFillConfirmBtn = view.findViewById(R.id.hostFillConfirmBtn);
hostFillGiveUpBtn = view.findViewById(R.id.hostFillGiveUpBtn);
hostFillConfirmBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String newHost = hostPortEdit.getText().toString();
if(!StringUtil.isBlank(newHost)){ PreferenceUtil.setPreference(getApplication(),"Host",newHost);}
Toast.makeText(getApplicationContext(), getResources().getString(R.string.save_success), Toast.LENGTH_SHORT).show(); popupLayout.dismiss();
}});
hostFillGiveUpBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
popupLayout.dismiss();
}});
11,获取自定义view中的控件
View view=View.inflate(LoginActivity.this,R.layout.popup_fill_host_layout,null);
popupLayout=PopupLayout.init(LoginActivity.this,view);
popupLayout.setUseRadius(true);
popupLayout.setWidth(350,true);
popupLayout.setHeight(300,true);
popupLayout.show(PopupLayout.POSITION_CENTER);
//绑定控件
hostPortEdit = view.findViewById(R.id.hostPortEdit);
或者
PopUpDialog newDialog = new PopUpDialog(MsgReView.this, R.style.MyDialog);newDialog.setCanceledOnTouchOutside(true); View view = newDialog.getCustomView(); TextView text1 = (TextView)view.findViewById(R.id.textViewTotal);
12,集成二维码扫描功能
欢迎使用:封装与接入ZXing扫码库
码字不易,如果觉得有帮助,一定要给我点赞哟~~
不然信不信我砸了你家灯,半夜偷亲你 ( ̄ε  ̄) !!!
Android开发中UI相关的问题总结的更多相关文章
- Android开发中Eclispe相关问题及相应解决(持续更新)
1.Eclipse项目中的Android Private Libraries没有自动生成. 一般而言,在Android开发中,项目中引用到的jar包会放到项目目录中的libs中,引入库会放到Andro ...
- Android开发:UI相关(一)自定义样式资源
一.自定义样式资源: 1.在drawble中新建xml资源文件: 如果新建的xml文件没有自动放置在drawable文件夹下,就手动移动到drawable下. 2.编写样式代码: < ...
- Android开发中,那些让您觉得相见恨晚的方法、类或接口
Android开发中,那些让你觉得相见恨晚的方法.类或接口本篇文章内容提取自知乎Android开发中,有哪些让你觉得相见恨晚的方法.类或接口?,其实有一部是JAVA的,但是在android开发中也算常 ...
- 转:Android开发中的MVP架构(最后链接资源不错)
Android开发中的MVP架构 最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解MVP和DDD,但是我们的新项目还是决定通过MVP来构建. 这篇文章是我通过研究和 ...
- 转: Android开发中的MVP架构详解(附加链接比较不错)
转: http://www.codeceo.com/article/android-mvp-artch.html 最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解M ...
- MVP模式在Android开发中的应用
一.MVP介绍 随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互.同一 ...
- 设计模式笔记之二:Android开发中的MVP架构(转)
写在前面,本博客来源于公众号文章:http://mp.weixin.qq.com/s?__biz=MzA3MDMyMjkzNg==&mid=402435540&idx=1&sn ...
- Android学习探索之Java 8 在Android 开发中的应用
前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...
- Android开发中的输入合法性检验
Why ? 合法性检查对于程序的健壮性具有重要作用.在Android开发中,良好的合法性检查设计机制可以使程序更加清晰,产生bug更少,交互更加友好. What ? 合法性检查的目的在于确定边界.对于 ...
随机推荐
- osg 加载 fbx文件
#ifdef _WIN32 #include <Windows.h> #endif // _WIN32 #include <osg/Group> #include <os ...
- 一百四十八:部署python项目之环境依赖
环境:centos7 + python3.6 准备工作,生成项目requirements.txt文件,用于存放第三方库和版本信息:pip freeze > requirements.txt,并且 ...
- APP手工项目02-用例编写-测试报告-fiddler弱网测试
回顾 APP专项测试(兼容性,安装,卸载,升级,交叉事件,PUSH消息,性能,其他类型) 项目环境(开发环境,测试环境,准生产环境,生产环境) APP内测发布平台(蒲公英,fir.im)支持apk,i ...
- git帮助和小结
获取帮助 想了解 Git 的各式工具该怎么用,可以阅读它们的使用帮助,方法有三: $ git help <verb> $ git <verb> --help $ man git ...
- centOS 8 安装Hadoop
1.安装环境 本教程使用 CentOS 8 64位 作为系统环境,请自行安装系统. 本教程基于原生 Hadoop 2,在 Hadoop 2.8.5 版本下验证通过,可适合任何 Hadoop 2.x.y ...
- (十六)toString()的用法
每一个非基本类型的对象都有一个toString()方法,而且当编译器需要一个String而你却只有一个对象时候,该方法便会被调用. public class te { public String to ...
- 关于cookies、sessionStorage和localStorage解释及区别
在浏览器查看 HTML4的本地存储 cookie 浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session等跟服务端进行数据交互. 一.cookie和sessio ...
- 网络编程(socket).WinSocket_recvfrom出错,GetLastError()为10054
1.在写 我的Qt598(vs2017)x64版本的 shadowsocks程序时遇到的. 具体问题情况 大概是这样:QUdpSocket(假设是sktA) connect接收函数,sktA侦听 端口 ...
- php 生成32位随机字符串 用于支付验证 用户注册
//32位随机字符串 function randstrpay($length=32) { $rand=''; $randstr= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567 ...
- 适合长期英语学习的电视、电台、podcast节目有哪些?
1.Stuff You Should Know 非常有名的一个节目 直接在度娘搜索第一个就是官网,里面有videos和podcasts两种 Postcasts有特别多种类的主题, 每期介绍一个主题, ...