00_小知识点

1.
    底部控件不受输入法影响被顶到上方
    解:在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>


    Screenshot_20160519-225642.png


13.
    给RadioButton选中改变颜色(动态改变颜色)

    radiobutton字体颜色改变color_radiobutton.xml
        (新建文件,写在color文件夹下,不是values的colors.xml,给RadioButton的textColor设置"@color/xxx")
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <selector xmlns:android="http://schemas.android.com/apk/res/android">  
    3.     <item android:state_checked="true" android:color="@color/color_text_selected"/>    
    4.     <!-- not selected -->    
    5.     <item android:state_checked="false" android:color="@color/color_text_normal"/>    
    6. </selector>  


 

radiobutton背景颜色改变radio_group_selector.xml


    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <selector xmlns:android="http://schemas.android.com/apk/res/android" >  
    3.     <item android:state_checked="true" android:drawable="@color/color_bg_selected" ></item>  
    4.     <item android:state_checked="false" android:drawable="@color/color_bg_normal"></item>  
    5. </selector>  


color.xml(as的values的是colors.xml文件)

    1. <color name="transparent">#000000</color>  
    2.     <color name="color_bg_selected">#e0301e</color>  
    3.     <color name="color_bg_normal">#e7e7e8</color>  
    4.     <color name="color_text_selected">#ffffff</color>  
    5.     <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"不可拖动,将作为指示器)        
  1. <RatingBar
  2. android:id="@+id/rb_stars"
  3. style="@android:style/Widget.RatingBar"
  4. android:numStars="5"
  5. android:layout_width="wrap_content"
  6. android:layout_height="wrap_content"
  7. android:minHeight="15dp"
  8. android:progressDrawable="@drawable/ratingbar"
  9. android:rating="4"/>
progressDrawable的ratingbar.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  3. <item android:id="@android:id/background" android:drawable="@drawable/rating_small_empty" />
  4. <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/rating_small_empty" />
  5. <item android:id="@android:id/progress" android:drawable="@drawable/rating_small_full" />
  6. </layer-list>

23.        
    //告诉Android系统对主线程访问网络和文件的检查策略不要这么严厉
  1. StrictMode.setThreadPolicy(StrictMode.ThreadPolicy.LAX);

24.
    随机设置字体大小,字体颜色(Color.rgb(int,int,int))
  1. Random random = new Random();
  2. int randomTextSize = random.nextInt(13) + 12;
  3. textView.setTextSize(randomTextSize);
  4. int red = random.nextInt(200);
  5. int green = random.nextInt(200);
  6. int blue = random.nextInt(200);
  7. textView.setTextColor(Color.rgb(red,green,blue));

25.
    1.png
    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)


posted on 2016-05-27 15:29  fendoudebb  阅读(159)  评论(0编辑  收藏  举报