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

欢迎使用自定义弹出框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相关的问题总结的更多相关文章

  1. Android开发中Eclispe相关问题及相应解决(持续更新)

    1.Eclipse项目中的Android Private Libraries没有自动生成. 一般而言,在Android开发中,项目中引用到的jar包会放到项目目录中的libs中,引入库会放到Andro ...

  2. Android开发:UI相关(一)自定义样式资源

    一.自定义样式资源:   1.在drawble中新建xml资源文件:     如果新建的xml文件没有自动放置在drawable文件夹下,就手动移动到drawable下. 2.编写样式代码: < ...

  3. Android开发中,那些让您觉得相见恨晚的方法、类或接口

    Android开发中,那些让你觉得相见恨晚的方法.类或接口本篇文章内容提取自知乎Android开发中,有哪些让你觉得相见恨晚的方法.类或接口?,其实有一部是JAVA的,但是在android开发中也算常 ...

  4. 转:Android开发中的MVP架构(最后链接资源不错)

    Android开发中的MVP架构 最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解MVP和DDD,但是我们的新项目还是决定通过MVP来构建. 这篇文章是我通过研究和 ...

  5. 转: Android开发中的MVP架构详解(附加链接比较不错)

    转: http://www.codeceo.com/article/android-mvp-artch.html 最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解M ...

  6. MVP模式在Android开发中的应用

    一.MVP介绍      随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互.同一 ...

  7. 设计模式笔记之二:Android开发中的MVP架构(转)

    写在前面,本博客来源于公众号文章:http://mp.weixin.qq.com/s?__biz=MzA3MDMyMjkzNg==&mid=402435540&idx=1&sn ...

  8. Android学习探索之Java 8 在Android 开发中的应用

    前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...

  9. Android开发中的输入合法性检验

    Why ? 合法性检查对于程序的健壮性具有重要作用.在Android开发中,良好的合法性检查设计机制可以使程序更加清晰,产生bug更少,交互更加友好. What ? 合法性检查的目的在于确定边界.对于 ...

随机推荐

  1. PHP松散比较与严格比较的区别详解

    在PHP中相等的比较有两种,松散比较和严格比较,当使用松散比较时,如果进行比较的两个操作数类型不同,那么会对操作数进行适当的类型转换,如果转换后的值相同则认为两个操作数相等.而使用严格比较时,如果两个 ...

  2. osg fbx模型删除模型中的某几个节点,实现编辑模型的功能

    fbx model element count:80 三维视图: {三维} 4294967295 osg::MatrixTransform1 基本墙 wall_240 [361750] 4294967 ...

  3. 利用IDEA上传文件到coding仓库 使用git上传文件github

    1.注册帐号 coding官网: https://coding.net/ github官网:https://github.com (以上根据自己需求注册,在下就不帖图了写步骤了) 2.下载 Git g ...

  4. SpringCloud学习成长之路 六 cloud配置中心

    一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ...

  5. python使用退格键时出现^H解决方法

    Linux 使用退格键时出现^H解决方法 1.临时解决 按ctrl 2.永久解决 基本现象 进入 Python shell,按下 Delete/Backspace 键: Python 3.5.2 (d ...

  6. iOS-UIScrollView滚动视图(转)

    http://blog.csdn.net/iukey/article/details/7319314 UIScrollView 类负责所有基于 UIKit 的滚动操作. 一.创建 CGRect bou ...

  7. 使用python或robotframework调multipart/form-data接口上传文件

    这几天调一个multipart/form-data类型的接口,遇到点小阻碍.之前同事有使用urllib库写了个类似的方法实现,比较长,想要改的时候发现不太好使.在网上查找发现用requests库做这个 ...

  8. 详解Nginx中HTTP的keepalive相关配置

    http keepalive在http早期 ,每个http请求都要求打开一个tpc socket连接,并且使用一次之后就断开这个tcp连接.使用keep-alive可以改善这种状态,即在一次TCP连接 ...

  9. SQLPrompt 6.3.0.354 完美破解 安装于 SQL Server 2012/2014

    SQL SERVER 2012格式化 SQL SERVER 2014格式化 SQLPrompt_6.4.0.641 破解版 百度云下载 迅雷下载 百度网盘下载 SQL Prompt 是一款拥有SQL智 ...

  10. 【VS开发】【C++开发】正确使用auto_ptr智能指针

    1, auto_ptr类 auto_ptr是一个模板类,定义如下: template <typename Type>class auto_ptr {...}: 它存储的是一个指向Type的 ...