底部控件不受输入法影响被顶到上方
9.
解:在AndroidManifest.xml中给这个Activity设置 <activity android:windowSoftInputMode="stateVisible|adjustPan" >
2.
动态设置控件margin值
解:
LayoutParams是RelativeLayout或者LinearLayout看控件的父节点,一般参数都是wrap_content,然后把获 得的参数设置margin,params.setMargin(左,上,右,下),最后控件设置参数,mView.setLayoutParams(params)
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout
.LayoutParams.WRAP_CONTENT, RelativeLayout
.LayoutParams.WRAP_CONTENT);
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
int screenWidth = display.getWidth();
int marginLeft = screenWidth / 5 ;
params.setMargins(marginLeft * 4 - marginLeft / 2,0,0,0);
mTv_shoppingcart_num.setLayoutParams(params);
3.
Fragment切换时想要保存数据:要用add,show,hide.不能用replace,它会重新创建fragment
底部用RadioButton实现,实现setOnCheckedChangeListener()
mBottom_Rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
FragmentTransaction ft = mFm.beginTransaction();
hideFragments(ft);
switch (checkedId) {
case R.id.bottom_rb_home:
if (mHomeFragment == null) {
mHomeFragment = new HomeFragment();
ft.add(R.id.fl_content, mHomeFragment);
} else {
ft.show(mHomeFragment);
}
break;
}
ft.commit();
}
});
private void hideFragments(FragmentTransaction ft) {
if (mHomeFragment != null) {
ft.hide(mHomeFragment);
}
if (mSearchFragment != null) {
ft.hide(mSearchFragment);
}
if (mBrandFragment != null) {
ft.hide(mBrandFragment);
}
if (mShoppingCartFragment != null) {
ft.hide(mShoppingCartFragment);
}
if (mMoreFragment != null) {
ft.hide(mMoreFragment);
}
}
4.
给listview添加头布局,并且设置头布局不可被点击
解:
View headView = View.inflate(this, R.layout.head_view, null);
mListView.addHeaderView(headView,null,false);
5.
让splash界面全屏显示:确认SplashActivty是否继承自Activity,AndroidStudio自动创建时默认继承AppCompatActivity,必须更改为Activity,在清单文件对应的splash的activity节点下增加:android:theme="@android:style/Theme.NoTitleBar.Fullscreen"属性即可
6.
Fragment的hide/show方法,当show的时候执行等同于Activity的OnResume,hide的时候执行等同于Activity的OnPause方法:Fragment的OnHiddenChanged(boolean hidden) 方法,当fragment调用了hide方法,就会传入true参数表示该fragment被隐藏了,当fragment调用了show方法后,该方法就会传入了参数为false表示该fragment被显示了if(hidden){ //不在最前端界面显示 等价于=> OnPause} else { //重新显示到最前端 等价于=> OnResume}
7.
listview条目点击变色,自定义变色,item点击变色
一般Listview条目被点击需要自定义点击时颜色变化,这里给出一种简单方法。ListView的listSelector属性设置为#00000000或@null 或android:listSelector="@android:color/transparent",后条目点击就没有变化了 ,再设置item的background即可。android:background="@drawable/bg_item"<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@android:color/white" android:state_pressed="false"/><item android:drawable="@color/holo_blue_light" android:state_pressed="true"/></selector>
8.
listview条目上有checkbox抢焦点的处理办法
方法一在checkbox的父布局上设置属性android:descendantFocusability="blocksDescendants"该属性使子布局的焦点按各自的区块划分,这样checkbox抢焦点的范围仅限于自身,不会把整个item的焦点都抢走。这种设置方式会使得checkbox有自己的响应事件,同时checkbox之外的item区域也可以响应自己的点击事件。方法二在checkbox布局里设置属性、android:focusable="false"android:clickable="false"android:enabled="false"使得checkbox完全不能获得焦点、不可被点击、不能响应点击事件。这样之后的效果就是checkbox区域不会再有自己的事件,就算点击的checkbox,也响应这个item的点击事件。同时要记得在item的点击事件中判断checkbox的当前状态,并手动变更checkbox的状态
9.
取消EditText下划线:给控件设置background属性,可以设置为白色(和父布局背景有关),也可以设置为透明(推荐设置为透明),(还未验证background设置为@null)
android:background="@android:color/transparent"
10.
用到fragment叠加时,出现背景叠加,可以给fragment的父布局设置一个白色背景,即可
11.
listview的数据为空的时候可以设置可以设置一张空背景图
listview.setEmptyView(...);
12.
将listview的分割线隐藏,并且设置条目之间的距离
android:divider="@android:color/transparent" //将分割线设置为透明
android:dividerHeight="18dp" //将分割线高度设置为18dp
android:listSelector="@android:color/transparent" //将条目的点击选择状态改为透明
然后给item的父布局background设置背景状态选择器,这样就会显示点击条目
状态选择器:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shape_listview_pressed"
android:state_pressed="true"/>
<item android:drawable="@drawable/shape_listview"/>
</selector>
自定义的形状:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:bottomLeftRadius="10dp"
android:bottomRightRadius="10dp"
android:topLeftRadius="10dp"
android:topRightRadius="10dp"/>
<solid android:color="#2f00"/>
<stroke android:width="1dp" android:color="#f00"/>
</shape>
13.
给RadioButton选中改变颜色(动态改变颜色)
radiobutton字体颜色改变color_radiobutton.xml
(新建文件,写在color文件夹下,不是values的colors.xml,给RadioButton的textColor设置"@color/xxx")
- <?xml version="1.0" encoding="utf-8"?>
- <selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_checked="true" android:color="@color/color_text_selected"/>
- <!-- not selected -->
- <item android:state_checked="false" android:color="@color/color_text_normal"/>
- </selector>
radiobutton背景颜色改变radio_group_selector.xml
- <?xml version="1.0" encoding="utf-8"?>
- <selector xmlns:android="http://schemas.android.com/apk/res/android" >
- <item android:state_checked="true" android:drawable="@color/color_bg_selected" ></item>
- <item android:state_checked="false" android:drawable="@color/color_bg_normal"></item>
- </selector>
color.xml(as的values的是colors.xml文件)
- <color name="transparent">#000000</color>
- <color name="color_bg_selected">#e0301e</color>
- <color name="color_bg_normal">#e7e7e8</color>
- <color name="color_text_selected">#ffffff</color>
- <color name="color_text_normal">#000000</color>
14.
Activity的启动模式为singleTask时,(任务栈中activity打开过,直接杀死其上方的activity并且将自己置于栈顶)
要从其他页面传值给这个activity时要在这个设置singleTask的Activity中重新 onNewIntent()方法,加入setIntent(intent);
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
mShopping_cart.setChecked(true);
requestNetwork();
}
15.
listview中包含checkbox勾选删除,第一个条目一直选中bug,解决方案
checkBox.setChecked(false);
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
info.isChecked = isChecked;
}
}
});
16.
android.content.res.Resources$NotFoundException: String resource ID #0x1
报这个错误表明:setText的时候应该传String却传了int
17.
ScrollView只能接受一个子节点
解:ScrollView只能有一个子节点,所以在ScrollView里嵌套一个ViewGroup(可以是LinearLayout),然后在LinearLayout里写一个布局
18.
使EditText进入界面默认不跳出软键盘(不获得焦点)
解:给EditText的父控件设置属性:
android:focusable="true"
android:focusableInTouchMode="true"
点击EditText区域外让EditText失去焦点
解:给父布局设置触摸监听,设置focusable为true,设置focusable的触摸模式为true,最后请求焦点
mLinearLayout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
mLinearLayout.setFocusable(true);
mLinearLayout.setFocusableInTouchMode(true);
mLinearLayout.requestFocus();
return false;
}
});
19.
点击EditText区域外,隐藏输入法
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
View v = getCurrentFocus();
if (isShouldHideInput(v, ev)) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
return super.dispatchTouchEvent(ev);
}
// 必不可少,否则所有的组件都不会有TouchEvent了
if (getWindow().superDispatchTouchEvent(ev)) {
return true;
}
return onTouchEvent(ev);
}
public boolean isShouldHideInput(View v, MotionEvent event) {
if (v != null && (v instanceof EditText)) {
int[] leftTop = { 0, 0 };
//获取输入框当前的location位置
v.getLocationInWindow(leftTop);
int left = leftTop[0];
int top = leftTop[1];
int bottom = top + v.getHeight();
int right = left + v.getWidth();
if (event.getX() > left && event.getX() < right
&& event.getY() > top && event.getY() < bottom) {
// 点击的是输入框区域,保留点击EditText的事件
return false;
} else {
return true;
}
}
return false;
}
20.
给ListView添加头布局,必须在setAdapter之前设置添加,在布局中可以给布局点击的selector
View view = View.inflate(this,R.layout.headview,null);
mListView.addHeaderView(view,null,false);
mListView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,getData()));
设置ListView的HeaderView不可被点击
mListView.addHeaderView(view,null,false);
21.
单例设计模式:避免在项目中多次new对象,多次调用相同代码
public class DataLoader {
//1.私有构造函数,禁止其他类创建其对象
private DataLoader(){}//2.创建本类对象,并且私有和静态(静态是为了下面getInstance是静态的,类刚加载不是静态的不初始化private static DataLoader mInstance = new DataLoader();//3.提供外部公共的访问方式去获取其类对象,返回值是其类的本身public static DataLoader getInstance() {return mInstance;}
}
22.
打分星星(可以拖动,设置android:isIndicator="true"不可拖动,将作为指示器)
<RatingBar
android:id="@+id/rb_stars"
style="@android:style/Widget.RatingBar"
android:numStars="5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="15dp"
android:progressDrawable="@drawable/ratingbar"
android:rating="4"/>
progressDrawable的ratingbar.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background" android:drawable="@drawable/rating_small_empty" />
<item android:id="@android:id/secondaryProgress" android:drawable="@drawable/rating_small_empty" />
<item android:id="@android:id/progress" android:drawable="@drawable/rating_small_full" />
</layer-list>
23.
//告诉Android系统对主线程访问网络和文件的检查策略不要这么严厉
StrictMode.setThreadPolicy(StrictMode.ThreadPolicy.LAX);
24.
随机设置字体大小,字体颜色(Color.rgb(int,int,int))
Random random = new Random();
int randomTextSize = random.nextInt(13) + 12;
textView.setTextSize(randomTextSize);
int red = random.nextInt(200);
int green = random.nextInt(200);
int blue = random.nextInt(200);
textView.setTextColor(Color.rgb(red,green,blue));
25.
ListView的条目布局上是三块View,但点击条目时,整个条目都被选中点击了,这个时候可以给,这三个view设置一个android:clickable="true"属性即可.
26.
使用第三方imageloader时错误:Java.lang.RuntimeException: ImageLoader must be init with configuration before using
解:在Application的类中onCreate方法内加上:
ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(this));
27.
listview加了headerview.第0条条目,position需要+1
来自为知笔记(Wiz)