1.把Button或者ImageButton的背景设为透明或者半透明:

半透明<Buttonandroid:background="#e0000000" ... />

透明<Buttonandroid:background="#00000000".../>

其他透明度:在RGB的值前面加上数字(100以内),如#90436EEE(RGB为436EEE),#50436EEE,根据值的大小呈现不同的显示效果,值越小透明度越高。

2.设置按钮背景图片或颜色:

btn.setBackgroundResource(R.drawable.comment_sel);

btn.setTextColor(getResources().getColor(R.color.blue));

3.文字换行:;(要加上分号).

4.布局时,不宜做过多的嵌套,否则容易报堆栈溢出异常。

5.9.png图片最好放在drawable-hdpi文件夹中,否则可能显示时可能会出现黑色的外边线。

6.android进程优先级:foreground Process(前台进程)>Visable Process(不在前端显示,但也没有完全隐藏,比如弹出一个对话框式的 Activity)>ServiceProcess>Background Process>Empty Process。

7.Android进程启动:PackageServiceàPackageManagerà加载manifest配置文件—>读取MAIN和LAUNCHERà映射类的实例。

8.TextView设置符号时(如问号),要在英文键盘环境下输入,否则会被显示为省略号。

9.EditText追加字符:

edit.append("0");

edit.getText().insert(edit.getSelectionStart(),"0");

10. EditText去掉默认的边框:android:background="@null"或者 android:background="#00000000

11.weight的使用:weight的意义在于,对于父控件,若子控件能够完全显示,先分配没有设置weight的控件,对于有weight属性的控件,则根据weight的值等分布局的剩余部分。如右图:都采用RelativeLayout左中右布局,但是由于文字的字数不同结果出现第二个布局中文字换行。解决方法:对中间的TextView设置weight = 1;外层采用LinearLayout或其他都可以达到需要的效果。

12.转字符串时,优先选用String.valueOf。直接用toString时最好做一个非null判断。二者区别可参考源码。

13.android工程中如果出现(所有的)资源找不到异常,可能是图片问题,检查9.png是否有问题。

14.对LinearLayout(或其他widget)整个控件设置onclick事件:

(1).XML中设置CliClickable=true(也可以不用设置,区别在于设置为true之后必须在代码中注册监听事件,否则点击后程序会崩溃),然后直接重写onClick方法;

(2)XML中设置onClick=”name(响应事件的名称)” ,在Activity中写一个name(View v)的方法执行点击后的操作。

15. dialog的WindowLeaked异常:

AlertDialogdialog = new AlertDialog.Builder(this);

dialog.show();

finish();

android 上的dialog.show不会阻塞调用线程(如UI线程),导致dialog尚未dismiss或者cancel之前,dialog所依赖的context被关闭,因此出现windowleaked。但是此问题并不影响程序继续运行。

解决办法:在dialog的OnClickListener事件中先dismiss(onClick中有一个DialogInterface参数,直接调用此DialogInterface的dismiss即可)后再finish activity(点击按钮时先调用dialog的dismiss()方法,然后调用Activity的finish()方法)。

16.xml中有EditText时,弹出键盘时导致页面向上收缩:

解决办法:在manifest.xml中对应的Activity设置 android:windowSoftInputMode="adjustPan";并且如果该xml中有ListView时,不能设置 android:fastScrollEnabled="true"android:focusable="true"(有待再次验证)。

17.若LinearLayout设置OnclickListener点击事件,则该LinearLayout中不宜放置Button按钮,否则当点击整个LinearLayout时,Button所占的区域无法执行点击命令。(也许可以通过设置focusable解决)

18. EditText的getText方法不会返回null(因此调用getText不必作mull判断)。

19.TextView设置字体粗体:

在xml文件中使用android:textStyle=”bold” 可以将英文设置成粗体,但是不能将中文设置成粗体,

将中文设置成粗体的方法是:

TextView tv =(TextView)findViewById(R.id.TextView01);

TextPaint tp = tv.getPaint();

tp.setFakeBoldText(true);

20.TimePicker,DatePicker:根据键盘输入动态更新日期

使用TimePicker,DatePicker时无法屏蔽软键盘,因此用户可以通过键盘输入日期。

假设有一个确定按钮。当用户通过键盘手动输入日期,点击确定,结果无法取到正确的日期值。解决方法:在findviewbyid找到TimePicker,DatePicker时首先调用它们的requestFocus(),点击确定时调用clearFocus()。

21.设置全屏 :

1)setContentView之前:

requestWindowFeature(Window.FEATURE_NO_TITLE);

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);

2)自定义style:<style name="full_screen">

<itemname="android:windowNoTitle">true</item>

<itemname="android:windowFullscreen">android:windowNoTitle</item>

</style>

对应的Activity设置android:theme=”@style/full_screen”

3)直接在Activity中设置android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"

22.使View居中:

利用weight属性,可以在上下或左右各添加空View:

<View       android:layout_width="0dip"

android:layout_height="0dp"

android:layout_weight="1"

/>

23.Fragment中嵌套ViewFlipper时,滑动触摸无响应:

在onCreateView中,对由inflate()得到的View设置view.setOnTouchListener(this);

在重写onTouch方法时返回true(而不再是detector.onTouchEvent(event))。

24.设置图片使其充满ImageView控件:

为了匹配ImageView的width和height属性(如:fill_parent),则设置scaleType=”fitXY”.

25.android的签名期限如果过期,项目就会报错,无法打包,不能通过编译。

26.在Adapter使用Intent启动Activity:

在构造器中传入Context参数,用Context.startActivity()启动Activity。

27.View设置padding和margin:

Padding:直接调用setPadding();

Margin:先构造出LayoutParams params = newLayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);之后params.setMargins(10,1 0,1 0, 10);最后

view. setLayoutParams(params);

28.软键盘imeOptions的用法:

android:imeOptions="flagNoExtractUi"  //使软键盘不全屏显示,只占用一部分屏幕

同时,这个属性还能控件软键盘右下角按键的显示内容,默认情况下为回车键

android:imeOptions="actionNone"  //输入框右侧不带任何提示

android:imeOptions="actionGo"    //右下角按键内容为'开始'

android:imeOptions="actionSearch"  //右下角按键为放大镜图片,搜索

android:imeOptions="actionSend"    //右下角按键内容为'发送'

android:imeOptions="actionNext"   //右下角按键内容为'下一步'

android:imeOptions="actionDone"  //右下角按键内容为'完成'

29.EditText设置字符长度限制:

XML: android:maxLength=“15

Code: editText.setFilters(newInputFilter[]{new InputFilter.LengthFilter(15});

30. java.lang.InstantiationException:can't instantiate class com.sns.ui.Login$UserLogin; no empty constructor

内部类UserLogin声明成static。

31. 判断当前为飞行模式:

Settings.System.getInt(context.getContentResolver(),

Settings.System.AIRPLANE_MODE_ON, 0)  == 0;

32.监听enter键,点击enter实现登录或其他响应事件:

editText.setOnEditorActionListener(newOnEditorActionListener() {

@Override

publicboolean onEditorAction(TextView v, int actionId, KeyEvent event) {

// TODOAuto-generated method stub

Server.login(Login.this,name, pwd);

returnfalse;

}

});

33.若Activity设置全屏,则Fragment中setHasOptionsMenu(true);将看不到菜单项。

34. PopupWindow:点击外部窗体时使其消失

popupWindow.setOutsideTouchable(true);

popupWindow.setFocusable(true);

popupWindow.setBackgroundDrawable(new BitmapDrawable());//重要: 点击使其消失,并且不会影响背景

35.用 SpannableStringBuilder处理TextView:

SpannableStringBuilder style=new SpannableStringBuilder(str);

style.setSpan(new ForegroundColorSpan(Color.argb(255, 12, 170, 218)),0,3,Spannable.SPAN_EXCLUSIVE_INCLUSIVE);

mTextView.setText(style);

注意:设置自定义color时,优先调用Color.argb方法(使用Color.rgb可能会出错)。

36.自定义Adapter继承自BaseAdapter时,ViewHolder使用静态类,非static的ViewHolder会导致ListView在滑动时比较卡。

37. java.lang.RuntimeException: Unable to destroy activity {com.demo.***.MainTabActivity}: java.lang.RuntimeException: Unable to destroy activity {com.demo.***.TabActivity01 }: java.lang.IllegalStateException: Activity has been destroyed

检查Activity的生命周期,对于ondestroy不要放不相关的代码。

38.ListView的item对某个widget进行触摸点击事件:

在item的布局中对相应的widget设置:

android:focusable="false"

android:focusableInTouchMode="false"

android:clickable="false"

主要考虑获取焦点的优先级,让widget在默认情况下不获取焦点。

39.EditText没有边框,聚焦时只有底部的边框出现:

在manifest.xml中看android:targetSdkVersions是否已设定。例如:要在4.0的平台上测试,而 android:targetSdkVersion=13(3.2平台),就会出现EditText缺失边框的现象。删除 android:targetSdkVersion标签即可。

40.对EditText,点击屏幕,隐藏软键盘:

对当前Activity的Layout设置id,然后重写onclick方法:

InputMethodManagerimm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

imm.hideSoftInputFromWindow(v.getWindowToken(),0);

41. android.view.WindowManager$BadTokenException:Unable to add window -- tokenandroid.app.LocalActivityManager$LocalActivityRecord@41226b10 is not valid; isyour activity running?

在Activity或View中,显示Dialog(AlertDialog),导致此错误。

1).如果构造Dialog使用的context是getApplication,改成相应的Activity,在Activity中进行添加view的操作。

2).如果使用了TabActivity(或者TabActivity里面嵌套TabAcitivity),context使用getParent。

【转】android UI设计的一些心得与问题解决(无效果图)的更多相关文章

  1. 【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面

    [Android UI设计与开发]第05期:引导界面(五)实现应用程序只启动一次引导界面 jingqing 发表于 2013-7-11 14:42:02 浏览(229501) 这篇文章算是对整个引导界 ...

  2. 详解 “Android UI”设计官方教程

    我们曾经给大家一个<MeeGo移动终端设备开发UI设计基础教程>,同时很多朋友都在寻找Android UI开发的教程,我们从Android的官方开发者博客找了一份幻灯片,介绍了一些Andr ...

  3. 移动周报:十款最实用的Android UI设计工具

    上一周可以说是一个不断Mark周,从最实用的Android UI设计工具.免费移动应用测试框架推荐,到HTML5开发框架等等,各种开发工具.框架精彩丰呈,看得小伙伴们是不亦乐乎.当然,还有不容错过的M ...

  4. 【转】【Android UI设计与开发】之详解ActionBar的使用,androidactionbar

    原文网址:http://www.bkjia.com/Androidjc/895966.html [Android UI设计与开发]之详解ActionBar的使用,androidactionbar 详解 ...

  5. shape和selector是Android UI设计中经常用到的

    shape和selector是Android UI设计中经常用到的,比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到shape和selector.可以这样说,shape和 ...

  6. Android UI设计

    Android UI设计--PopupWindow显示位置设置 摘要: 当点击某个按钮并弹出PopupWindow时,PopupWindow左下角默认与按钮对齐,但是如果PopupWindow是下图的 ...

  7. Android UI设计的基本元素有哪些

    在android app开发如火如荼的今天,如何让自己的App受人欢迎.如何增加app的下载量和使用量....成为很多android应用开发前,必须讨论的问题.而ui设计则是提升客户视觉体验度.提升下 ...

  8. (转载)Android UI设计之AlertDialog弹窗控件

    Android UI设计之AlertDialog弹窗控件 作者:qq_27630169 字体:[增加 减小] 类型:转载 时间:2016-08-18我要评论 这篇文章主要为大家详细介绍了Android ...

  9. 【Android UI设计与开发】第01期:引导界面(一)ViewPager介绍和使用详解

    做Android开发加起来差不多也有一年多的时间了,总是想写点自己在开发中的心得体会与大家一起交流分享.共同进步,刚开始写也不知该如何下手,仔细想了一下,既然是刚开始写,那就从一个软件给人最直观的感受 ...

随机推荐

  1. 分析 "End" "Unload Me" "Exit Sub" 之间的区别与联系

    之前就想过这个问题,这么熟悉的几个东西居然对他们分析的不是很透彻. “End”  跟  “Unload  Me”  在敲程序 的时候经常敲到,“exit  sub”  更是熟悉,下面,解析: End  ...

  2. 初解DLL基本知识

    1.DLL基本理论 在Windows操作系统中,几乎所有的内容都是以DLL的形式存在的. 1.DLL基本概念 语言程序要从目标代码(.obj)外部引用函数,可以通过俩种途径实现——静态链接和动态链接. ...

  3. 修复jquery.treeview的增加子节点的方法的bug

    1.修复理由 在一个android项目中用到了treeview控件(本来自己通过android的原生api实现了一个http://www.cnblogs.com/Mr-Nobody/p/3527688 ...

  4. 一个完整openlayer的例子,包括marker,popup等

    整理转自:http://www.blogjava.net/siriusfx/archive/2007/11/26/163104.html openlayers提供了几十个示例,虽然每个示例都很简单,但 ...

  5. vi之跳到指定行

    vi里怎样跳转到某一指定行 输入 :行号 :$跳到最后一行 gg跳到第一行.

  6. 【POJ】【2975】Nim

    博弈论 我哭……思路错误WA了6次?(好像还有手抖点错……) 本题是要求Nim游戏的第一步必胜策略有几种. 一开始我想:先全部异或起来得到ans,从每个比ans大的堆里取走ans个即可,答案如此累计… ...

  7. maven+springMVC+mybatis+junit详细搭建过程 ***

    springMVC+mybatis框架搭建 在上一遍博客中以及讲诉了新建maven项目的流程,现在紧跟上一遍文章,接着搭建spring项目 首先我们先要弄清搭建项目的一般流程,需要注意哪些方面,想要什 ...

  8. NYOJ-171 聪明的kk AC 分类: NYOJ 2014-01-02 09:01 165人阅读 评论(0) 收藏

    #include<stdio.h> #define max(x,y) x>y?x:y int main(){ int num[22][22]={0}; int n,m; int x, ...

  9. nodeJS实战

    github代码托管地址: https://github.com/Iwillknow/microblog.git 根据<NodeJS开发指南>实例进行实战{{%并且希望一步步自己能够逐步将 ...

  10. Web应用中的轻量级消息队列

    Web应用中为什么会需要消息队列?主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达mysql,直接导致无数的行锁表锁,甚 ...