布局常用的技巧
启动界面
- 如何实现一个启动界面,例如微信、网易新闻。
1. 创建一个布局文件,里面放一张图。
2. 在主Activity里,通过handler 的postDelayed方法 进行跳转界面
new Handler().postDelayed(new Runnable(){
@Override
public void run(){
Intent intent = new Intent (Appstart.this,Welcome.class);
startActivity(intent);
Appstart.this.finish();
}
},1000);
ActionBar
标题栏可用一个layout 表示 heidht设置45dp
分割线可用view控件表示 height设置成2dp
EditText、TextView
EditText background=”@null”可以去掉下划线
TextView 设置中心垂直 水平 无效果,是因为宽高的影响
EditText 设置字数限制 两种方法:
1.xml中设置maxLength属性
2.java调用setFilters方法
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(140)});
TextView设置行间距
android:lineSpacingExtra="7dp"
EditText 设置光标位置
android:gravity="right"
解决光标在两行字 中间的方法
android:gravity="top"
设置默认键盘不显示
android:windowSoftInputMode="adjustNothing|stateHidden"
光标移到最后
Editable ea = editText.getText();
editText.setSelection(ea.length());
重要的知识点
相同布局的Activity,可以通过传参数 改变Title来实现 多个activity共用一个布局。
DatePicker
DatePicker 必须 设置 显示样式
android:datepickermode
设置日历不显示
android:calendarViewShown="false"
markdown引用格式
markdown引用格式:日期+文件名+”/“
http://localhost:4000/2015/09/17/2015-09-17-ImageLoader/
退出整个程序的代码
android.os.Process.killProcess(android.os.Process.myPid());
退出到桌面的代码
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
如何判断是否第一进入本界面
1. onCreate 获取一个SharedPreferences、同时创建一个xml文件。
2. 创建一个boolean变量isFirst 通过sp对象来获取其值。
3. 判断isFirst是否为true,是则做第一次的处理。
4. 第一次处理之后,要把boolean值设置为false,并传给xml文件里。
代码如下
private SharedPreferences sp;
private boolean isFirst = true;
public void onCreate(){
sp = getSharedPreferences("Erintrus.xml",MODE_PRIVATE);
isFirst = sp.getBoolean("isFirst",true);
if(isFirst){
Editor editor = sp.edit();
//做第一次进入界面的处理
editor.putBoolean("isFirst",false); //改变xml文件里isFirst的值
editor.commit();
}
}
将常用的代码封装成一个类 IntentUtils类
public class IntentUtils{
public void statrActivity(Context context , Class<?> cls){
Intent intent = new Intent(context,cls);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
}
Selector在Button里无效的原因
默认图必须放在最后面
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/common_icon_gray_tab" android:state_pressed="true"></item>
<item android:drawable="@drawable/common_icon_red_tab"></item> //默认图必须放在最下面
</selector>
如何导入so文件
在src/main 下面新建一个jniLibs文件夹 放入文件即可
缓存集合的时候不能用“=”赋值,要用addAll或者For循环。
.9.png
- 一句话总结:画黑点的地方无限延长
- tool文件夹先开启工具
自动弹出软键盘
Mainfest中设置 windowSoftInputMode属性
android:windowSoftInputMode="stateAlwaysVisible"
【A】stateUnspecified:默认状态,系统将选择一个合适的状态或依赖于主题的设置
【B】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
【C】stateHidden:用户选择activity时,软键盘总是被隐藏
【D】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
【E】stateVisible:软键盘通常是可见的
【F】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
【H】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
【I】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分
解决方法:
在activity设置windowSoftInputMode属性为adjustPan
adjustResize
标题栏被顶走
解决方法:
在activity设置windowSoftInputMode属性为adjustResize
EditText 只读内容滚动
setKeyListener(null);
EditText禁止输入回车
方法一
@Override public boolean dispatchKeyEvent(KeyEvent event) { switch (event.getKeyCode()) { case KeyEvent.KEYCODE_DPAD_CENTER: case KeyEvent.KEYCODE_ENTER: return true; } return super.dispatchKeyEvent(event); }
- 方法二
//在布局文件里声明singleLine属性
android:singleLine="true"
集合按key排序
用TreeMap
Map<Integer, ArrayList<User>> map = new TreeMap<>();
示例
BNJ中联系人列表
测试方法
- 设置null,空字符等数据
aligntop没效果
- 没有设置父布局的高度
Animation动画
minHeight的作用
- 设置warp_content可实现根据文本自动改变控件的高度
android:alpha属性
- 设置透明度 值是 0(透明) - 1(不透明)范围
实战:
BNJ实现%50黑的图片
- FramLayout 里面放一个ImageView
- Framlayout 设置背景为黑色
- ImageView设置alpha=0.5
String.Format
设置浮点数显示一位小数
//score是浮点数,%.2f表示只显示两位小数 String.format("%.2f",score);
删除桌面上不存在的项目
DEL /F /A /Q \\?\%1
RD /S /Q \\?\%1
mipmap尺寸
mipmap - mdpi 48
mipmap - hdpi 72
mipmap - xhdpi 96
mipmap - xxhpi 144
include包括的布局不能使用below等属性
错误示例
<include android:layout_below="@+id/llContainer" //这里会报错 layout="@layout/activity_mani"/>
总结:其他控件要相对该layout进行布局,必须使用layout里面的根布局的id来实现。
高度布局(实现下列效果)
布局技巧
- RelativeLayout为自适应、设置最小高度
- tvTitle为margin_top= 15
- tvValue 为margin_top = 15 、margin_bottom = 15
参考机构端事项内容
ScrollView与Edittext冲突
- Scrollview 里面加有edittext,由于Edittext会自动获取焦点,会导致界面向Edittext方向移动。(如下)
解决办法:Edittext的父布局加入下面代码
android:focusable="true" android:focusableInTouchMode="true"