Android-开发遇到的问题汇总

1.ActivityGroup中某一FragmentActivity的onActivityResult()方法不执行。

因为在FragmentActivity跳转时getParent()执行startActivityForResult()方法,因此会在ActivityGroup中执行onActivityResult()方法。

2.使用Java代码为Button字体颜色添加Selector。

添加Selector文件,保存在res/color/目录下:
button.setTextColor(mContext.getResources().getColorStateList(R.color.button_color));

3.获取Android屏幕密度density。

mContext.getResources().getDisplayMetrics().density;
Resources.getSystem().getDisplayMetrics().density;
Resources.getSystem().getDisplayMetrics().widthPixels;
Resources.getSystem().getDisplayMetrics().heightPixels;

4.View的方法。

public final Context getContext () //获取Context。
public boolean isShown () //判断View是否显示。

5.TextView的背景是自定义的ShapeDrawable,如何更改颜色。

tv.getBackground().mutate();
((GradientDrawable) tv.getBackground()).setColor(int argb);

6.通过x,y坐标获取ListView中Item的Position。

public int pointToPosition (int x, int y) (异常返回:INVALID_POSITION)
public long pointToRowId (int x, int y) (异常返回:INVALID_ROW_ID)

7.自定义View不运行onDraw()方法。

在构造函数中添加:
this.setWillNotDraw(false);

8.关闭Dialog时异常:java.lang.IllegalArgumentException: View not attached to window manager。

if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN) {
    if (isFinishing()) {
        return;
    }
} else {
    if (MainActivity.this.isDestroyed()) {
        return;
    }
}

9.context.getString()与Resources.getSystem().getString()区别。

Resources.getSystem()只支持系统级别的资源,而非应用级别的。

10.屏幕旋转

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); 
添加android:configChanges="orientation|screenSize"时,不调用Activity生命周期方法,仅调用onConfigurationChanged方法。
屏幕适配:layoutlayout-land

11.关于Fragment not attached to Activity 异常

出现该异常,是因为Fragment的还没有Attach到Activity时,调用了如getResource()等,需要上下文Content的函数。

解决方案是在调用之前增加一个判断isAdded()。

如果是取Strings.xml字符串数据,则可用Application.getString()方法。

12.WebView混合排版中的图片显示不出来。

Android5.0起改变了WebView的默认行为。系统终止了混排内容及第三方cookies的默认行为。可分别通过以下方法开启:
setMixedContentMode()
setAcceptThirdPartyCookies()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}

13.popupwindow点击其他地方消失

popWin.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
popWin.setOutsideTouchable(true);

14.动态设置字体大小

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_medium));

15.删除html标签

    public static String delHTMLTag(String htmlStr) {
        String regEx_script = "]*?>[\\s\\S]*?<\\/script>"; //定义script的正则表达式
        String regEx_style = "]*?>[\\s\\S]*?<\\/style>"; //定义style的正则表达式
        String regEx_html = "<[^>]+>"; //定义HTML标签的正则表达式

        Pattern p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE);
        Matcher m_script = p_script.matcher(htmlStr);
        htmlStr = m_script.replaceAll(""); //过滤script标签

        Pattern p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE);
        Matcher m_style = p_style.matcher(htmlStr);
        htmlStr = m_style.replaceAll(""); //过滤style标签

        Pattern p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);
        Matcher m_html = p_html.matcher(htmlStr);
        htmlStr = m_html.replaceAll(""); //过滤html标签

        return htmlStr.trim(); //返回文本字符串
    }

16.在Fragment中设置ViewPager

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    ViewPager mViewPager = (ViewPager) view.findViewById(R.id.viewPager);
    mViewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
}

17.Java生成jks文件

keytool -genkey -alias mydomain -keyalg RSA -keystore keystore.jks -keysize 2048

18.SharedPreferences的commit()和apply()方法的区别

如果不关心SharedPreferences的返回值,edit之后,用apply()。

19.不可输入的EditText相应点击事件

editText.setFocusable(false);
editText.setEnabled(true);
editText.setOnClickListener(this);

20.颜色透明度

100%:FF,95%:F2,90%:E6,85%:D9,
80%:CC,75%:BF,70%:B3,65%:A6,
60%:9955%:8C,50%:8045%:7340%:6635%:5930%:4D,25%:4020%:3315%:2610%:1A,5%:0D,
0%:00

21.setBackgroundResource导致out of memory

Android background image memory usage

将png图片放到`res/drawable-nodpi/`目录下。

22.获取手机当前窗口获取焦点的windows

adb shell dumpsys window windows | grep -E 'mCurrentFocus'

23.左右或上下翻转View

view.setScaleX(-1);
view.setScaleY(-1);

24.测量text的宽度

TextPaint textPaint = textView.getPaint();
int textWidth = (int) textPaint.measureText(text);

25.当ListView有Header时,onItemClick里的position不正确

@Override
public void onItemClick(AdapterView parent, View v, int position, long id) {
    doSomething(parent.getAdapter().getItem(position));
}

26.页面无法截屏

getWindow().addFlags(WindowManager.LayoutParams. FLAG_SECURE);

27.如何清除EditText焦点

在页面根布局加入:

"http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout"
    android:descendantFocusability="beforeDescendants"
    android:focusableInTouchMode="true" >

此时页面显示时根布局获取焦点。
当需要清除运行时子View的焦点时:

findViewById(R.id.mainLayout).requestFocus();

descendantFocusability属性:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点

28.查看当前可见Activity的view结构

$ adb shell dumpsys activity [ActivityName]

29.给Listview的分割线添加边距

新建list_divider.xml:


<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetLeft="50dp"
    android:insetRight="50dp" >

    <shape>
        <solid android:color="@color/orange" />
        <corners android:radius="2.0dip" />
    shape>

inset>

在ListView添加divider:

<ListView
    android:dividerHeight="2dp"
    android:divider="@drawable/list_divider"
/>

如果Listview的item有背景色,则需使用layer-list:

 
  <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >  

   <item>
        <shape android:shape="rectangle" >
            <solid android:color="@color/list_background" />
        shape>
    item>


    <item
        android:left="10dp"
        android:right="10dp">
        <shape android:shape="rectangle" >
            <solid android:color="@color/divider_color"/>
        shape>
    item>

layer-list>

30.导出/data/anr/trances.txt文件

adb shell cat /data/anr/traces.txt > e:\anr.txt

你可能感兴趣的:(Android)