工作近三年,也积累了不少东西,我有一个自己的小知识库,它记录我实际开发中遇到的问题及一些小知识点,一直未分享,今天这里分享出来。

目录

125、GetTag()

publicvoid onClick(View v) {
((Button)v).getText().toString();
v.getTag().toString()
}

124、让某个Activity透明

res/values文件夹下建立styles.xml:

<?xml version=1.0 encoding=utf-8?>  

<RESOURCES>  

  <STYLE name=translucent>  

    <item name=android:windowBackground>@color/translucent_background</item>  

    <item name=android:windowIsTranslucent>true</item>  

    <item   name=android:windowAnimationStyle>@android:style/Animation.Translucent</item>  

  </STYLE>  

</RESOURCES>  

在该文件夹下在创建文件colors.xml

<?xml version=1.0 encoding=UTF-8?>  

<RESOURCES>  

<COLOR name=translucent_background>#60000000</COLOR>  

</RESOURCES>  

AndroidManifest.xml中找到要弹出的activity,加入theme: android:theme=”@style/translucent”

现在activity透明,但是里面的button不透明.如果让他们也透明或者半透明,就设置窗口属性.

Window window=getWindow();
WindowManager.LayoutParams wl = window.getAttributes();
wl.flags=WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
wl.alpha=0.6f; //这句就是设置窗口里崆件的透明度的.0.0全透明.1.0不透明.
window.setAttributes(wl);

123、将String写入Txt格式存存储卡

<!-- sd卡 -->
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
/**
     * 将String写入存储卡
     * 
     * @param person
     * @throws FileNotFoundException
     */
    privatevoid writeJSONObjectToSdCard(String person) {
        File file = new File(Environment.getExternalStorageDirectory()
                + File.separator + "json" + File.separator + "json.txt");
        // 文件夹不存在的话,就创建文件夹
        if (!file.getParentFile().exists()) {
            file.getParentFile().mkdirs();
        }
        // 写入内存卡
        PrintStream outputStream = null;
        try {
            outputStream = new PrintStream(new FileOutputStream(file));
            outputStream.print(person.toString());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (outputStream != null) {
                outputStream.close();
            }
        }
    }

122、Android Home键监听

/**
 * Home键监听封装
 * 
 * @author way
 * 
 */
public class HomeWatcher {

    static final String TAG = "wxl";
    private Context mContext;
    private IntentFilter mFilter;
    private OnHomePressedListener mListener;
    private InnerRecevier mRecevier;

    // 回调接口
    public interface OnHomePressedListener {
        public void onHomePressed();

        public void onHomeLongPressed();
    }

    public HomeWatcher(Context context) {
        mContext = context;
        mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
    }

    /**
     * 设置监听
     * 
     * @param listener
     */
    public void setOnHomePressedListener(OnHomePressedListener listener) {
        mListener = listener;
        mRecevier = new InnerRecevier();
    }

    /**
     * 开始监听,注册广播
     */
    public void startWatch() {
        if (mRecevier != null) {
            mContext.registerReceiver(mRecevier, mFilter);
        }
    }

    /**
     * 停止监听,注销广播
     */
    public void stopWatch() {
        if (mRecevier != null) {
            mContext.unregisterReceiver(mRecevier);
        }
    }

    /**
     * 广播接收者
     */
    class InnerRecevier extends BroadcastReceiver {
        final String SYSTEM_DIALOG_REASON_KEY = "reason";
        final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";
        final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
        final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";

        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
                String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
                if (reason != null) {
                    Log.e(TAG, "action:" + action + ",reason:" + reason);
                    if (mListener != null) {
                        if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {
                            // 短按home键
                            mListener.onHomePressed();
                        } else if (reason
                                .equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
                            // 长按home键
                            mListener.onHomeLongPressed();
                        }
                    }
                }
            }
        }
    }
}

调用
class MainActivity extends Activity {
    private ListView listView;
    int mPosition = 0;
    ArrayAdapter arrayAdapter;
    List<String> dataList;
    private static final String TAG = "wxl";
    private HomeWatcher mHomeWatcher;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mHomeWatcher = new HomeWatcher(this);
        mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() {
            @Override
            public void onHomePressed() {
                Log.e(TAG, "onHomePressed");
            }

            @Override
            public void onHomeLongPressed() {
                Log.e(TAG, "onHomeLongPressed");
            }
        });
        mHomeWatcher.startWatch();
    }

    /**
     * 重新进入或打开屏幕灯
     */
    protected void onRestart() {
        Log.d("wxl", "onRestart");
        mHomeWatcher.startWatch();
        super.onRestart();
    }

    /**
     * 按Home键或关闭屏幕灯
     */
    protected void onPause() {
        super.onPause();
        Log.d("wxl", "onPause");
        mHomeWatcher.stopWatch();// 在onPause中停止监听,不然会报错的。
    }

    private List<String> getData() {

        // Log.d("wxl", "getData=" + "getData");

        List<String> data = new ArrayList<String>();
        for (int i = 0; i < 20; i++) {

            data.add("测试数据" + i);
        }

        return data;

    }

}

121、ProgressDialog

final ProgressDialog progress = new ProgressDialog(LoginActivity.this);
        progress.setMessage("请稍等...");
        progress.setCanceledOnTouchOutside(false);
        progress.show();
progress.dismiss();

120、ListView点击Item标示消失

  • DataAdapter ```java Intent intent = new Intent(activity, ChatActivity.class); intent.putExtra("userhead", doctorList.get(position) .getHeadImg()); intent.putExtra("username", doctorList.get(position) .getName()); intent.putExtra("userId", doctorList.get(position) .getUserinfo_djid()); intent.putExtra("position", position); startActivityForResult(intent,

                        AppConfig.REQUEST_CODE_DIALOGUE);
    
  • ChatActivity.class

public void onBackPressed() {
        Intent intent;
        intent = new Intent();
        Bundle bundle = new Bundle();
        bundle.putInt("position", position);
        intent.putExtras(bundle);
        setResult(RESULT_OK, intent);
        finish();

    }
  • onActivityResult
public void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == AppConfig.REQUEST_CODE_DIALOGUE
                && resultCode == RESULT_OK) {
            int position = data.getExtras().getInt("position");
            Object object = dataAdapter.getItem(position);
            if (object instanceof DoctorList) {
                DoctorList doctorList = (DoctorList) object;
                doctorList.setUnreadnum("0");
                dataAdapter.notifyDataSetChanged();
            }
        }
        super.onActivityResult(requestCode, resultCode, data);
    }
  • DoctorList
class DialogueBean {
    private String result;
    private ArrayList<DoctorList> doctorList;
public class DoctorList implements Serializable {
        private String userinfo_djid;
        private String headImg;
        private String name;
        private String unreadnum;
        private String infoContent;
        private String sendDate;
        private String ky_flag;
        private String tobewritten;
}
}

119、拨号盘拨打电话

Intent intent = new Intent(Intent.ACTION_CALL,
Uri.parse("tel:" + "400-036-1977"));
// intent.setAction(Intent.ACTION_CALL);// 直接拨号
intent.setAction(Intent.ACTION_DIAL);// 拨号盘
startActivity(intent);

118、毫秒

毫秒Calendar.getInstance().getTimeInMillis()和System.currentTimeMillis()

117、Drawable/Bitmap、String/InputStream、Bitmap/Byte[]互转

(1)Drawable互转Bitmap
Drawable转Bitmap
Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.myimage);
BitmapDrawable bd = (BitmapDrawable) d;
Bitmap bm = bd.getBitmap();

Bitmap转Drawable
Bitmap bm=xxx; //xxx根据你的情况获取
BitmapDrawable bd=BitmapDrawable(bm);
BtimapDrawable是Drawable的子类最终直接使用bd对象即可

mPicPath//本地图片路径转成Bitmap格式
Bitmap pic = BitmapFactory.decodeFile(this.mPicPath);
        image.setImageBitmap(pic);
转成Bitmap格式
(2)String与InputStream相互转换
String to InputStream
String str = "String与InputStream相互转换";
InputStream   in_nocode   =   new   ByteArrayInputStream(str.getBytes());   
InputStream   in_withcode   =   new   ByteArrayInputStream(str.getBytes("UTF-8"));  


InputStream to String
    这里提供几个方法
方法1
  public String convertStreamToString(InputStream is) {   
   BufferedReader reader = new BufferedReader(new InputStreamReader(is));   
        StringBuilder sb = new StringBuilder();   

        String line = null;   
        try {   
            while ((line = reader.readLine()) != null) {   
                sb.append(line + "/n");   
            }   
        } catch (IOException e) {   
            e.printStackTrace();   
        } finally {   
            try {   
                is.close();   
            } catch (IOException e) {   
                e.printStackTrace();   
            }   
        }   

        return sb.toString();   
    }   

方法2
public   String   inputStream2String   (InputStream   in)   throws   IOException   { 
        StringBuffer   out   =   new   StringBuffer(); 
        byte[]   b   =   new   byte[4096]; 
        for   (int   n;   (n   =   in.read(b))   !=   -1;)   { 
                out.append(new   String(b,   0,   n)); 
        } 
        return   out.toString(); 
} 
方法3
public   static   String   inputStream2String(InputStream   is)   throws   IOException{ 
        ByteArrayOutputStream   baos   =   new   ByteArrayOutputStream(); 
        int   i=-1; 
        while((i=is.read())!=-1){ 
        baos.write(i); 
        } 
       return   baos.toString(); 
}
Drawable  Bitmap
Drawable  Bitmap
public static Bitmap drawableToBitmap(Drawable drawable) {       
        Bitmap bitmap = Bitmap.createBitmap(
                                        drawable.getIntrinsicWidth(),
                                        drawable.getIntrinsicHeight(),
                                        drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
                                                        : Bitmap.Config.RGB_565);
        Canvas canvas = new Canvas(bitmap);
        //canvas.setBitmap(bitmap);
        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
        drawable.draw(canvas);
        return bitmap;
}
2从资源中获取Bitmap
Resources res=getResources();
Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);
Bitmap  byte[]
3Bitmap  byte[]
private byte[] Bitmap2Bytes(Bitmap bm){
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
    return baos.toByteArray();   }
4 byte[]  Bitmap
   private Bitmap Bytes2Bimap(byte[] b){
                    if(b.length!=0){
                            return BitmapFactory.decodeByteArray(b, 0, b.length);
                    }
                    else {
                            return null;
                    }
          }

116、应用WebView加载Html和本地图片资源

WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
下边是实现这个功能的源代码
public void loadHTML() {
final String mimeType = "text/html";
final String encoding = "utf-8";
final String html = "<h1>Header</h1><p>Custom HTML</p>
<p><img src=\"file:///android_asset/image1.jpg\" />
</p>";
WebView wv = (WebView) findViewById(R.id.wv1);
wv.loadDataWithBaseURL("fake://not/needed", html,
mimeType, encoding, "");
}
//wView.loadUrl("file:///android_asset/index.html");
-----打开本包内asset目录下的index.html文件
//wView.loadUrl("content://com.android.htmlfileprovider/sdcard/index.html");
-----打开本地sd卡内的index.html文件
//wView.loadUrl("http://wap.baidu.com");
-----打开指定URL的html文件 ......
webView.setInitialScale(30); //这个就是重点,你可以在这里根据需求来设置缩放比例


<activity
            android:name="com.xiaomolong.ufosay.ui.SearchResultActvity"
            android:hardwareAccelerated="true"
            android:label="@string/search_result"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>

            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable" />
        </activity>

public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.activity_main, menu);
        SearchView searchView = (SearchView) menu.findItem(R.id.action_search)
                .getActionView();
        if (searchView == null) {
            Log.e("wxl", "Fail to get Search View.");
            return true;
        }
        searchView.setIconifiedByDefault(true); // 缺省值就是true,可能不专门进行设置,false和true的效果图如下,true的输入框更大
        // 获取搜索服务管理器
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        // searchable activity的component name,由此系统可通过intent进行唤起
        ComponentName cn = new ComponentName(this, SearchResultActvity.class);
        // 通过搜索管理器,从searchable
        // activity中获取相关搜索信息,就是searchable的xml设置。如果返回null,表示该activity不存在,或者不是searchable
        SearchableInfo info = searchManager.getSearchableInfo(cn);
        if (info == null) {
            Log.e("wxl", "Fail to get search info.");
        }
        // 将searchable activity的搜索信息与search view关联
        searchView.setSearchableInfo(info);
        return true;
    }


<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:hint="@string/search_hint"
    android:label="@string/search_result" />
<!-- wei必须包含android:label一般与app或activity的label相同但不一样也不影响效果 -->
<!-- wei一般建议提供hint作为输入框的提示 -->


<item
        android:id="@+id/action_search"
        android:actionViewClass="android.widget.SearchView"
        android:icon="@drawable/ic_action_search"
        android:showAsAction="ifRoom|withText"
        android:title="action_websearch"/>

public class SearchResultActvity extends Activity {
    private WebView mWebview;
    private String searchResult = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.search_result);
        // … …
        doSearchQuery(getIntent());
        initView();
    }

    @Override
    protected void onNewIntent(Intent intent) { // activity重新置顶
        super.onNewIntent(intent);
        doSearchQuery(intent);
    }

    // 对searchable activity的调用仍是标准的intent,我们可以从intent中获取信息,即要搜索的内容
    private void doSearchQuery(Intent intent) {
        if (intent == null)
            return;
        String queryAction = intent.getAction();
        if (Intent.ACTION_SEARCH.equals(intent.getAction())) { // 如果是通过ACTION_SEARCH来调用,即如果通过搜索调用
            searchResult = intent.getStringExtra(SearchManager.QUERY); // 获取搜索内容
            // … …
        }

    }

    private void initView() {
        mWebview = (WebView) findViewById(R.id.mWebview);
        WebSettings webSettings = mWebview.getSettings();
        webSettings.setUseWideViewPort(true);
        webSettings.setLoadWithOverviewMode(true);
        webSettings.setJavaScriptEnabled(true);
        webSettings.setPluginState(PluginState.ON);
        webSettings.setBuiltInZoomControls(true);
        webSettings.setDisplayZoomControls(false);
        mWebview.setDownloadListener(new MyWebViewDownLoadListener());
        mWebview.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
        mWebview.setWebChromeClient(new WebChromeClient());
        // Log.d("wxl", "url=" + setUrl());
        mWebview.loadUrl(setUrl());
        mWebview.setWebViewClient(new MyWebViewClient());

    }

    public void onPause() {// 继承自Activity
        super.onPause();
        mWebview.onPause();
    }

    public void onResume() {// 继承自Activity
        super.onResume();
        mWebview.onResume();
    }

    private String setUrl() {
        String url = "";
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append("http://www.soku.com/m/y/video?q=");
        try {
            stringBuffer.append(URLEncoder.encode(searchResult, "utf-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        url = stringBuffer.toString();

        return url;

    }

    // 文件的下载
    private class MyWebViewDownLoadListener implements DownloadListener {

        public void onDownloadStart(String url, String userAgent,
                String contentDisposition, String mimetype, long contentLength) {
            Uri uri = Uri.parse(url);
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            startActivity(intent);
        }

    }

    class MyWebViewClient extends WebViewClient {

        @Override
        public void onReceivedError(WebView view, int errorCode,
                String description, String failingUrl) {
            mWebview.setVisibility(View.GONE);
            Log.i("wxl", "onReceivedError");
            // Toast.makeText(SearchResultActvity.this, "网络不给力",
            // Toast.LENGTH_LONG)
            // .show();
            super.onReceivedError(view, errorCode, description, failingUrl);
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            Log.i("wxl", "onPageStarted url=" + url);

            // Toast.makeText(SearchResultActvity.this, "onPageStartedurl=" +
            // url,
            // Toast.LENGTH_LONG).show();
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
//          view.loadUrl(url);
            Log.i("wxl", "shouldOverrideUrlLoading url=" + url);
            // Toast.makeText(SearchResultActvity.this,
            // "shouldOverrideUrlLoading=" + url, Toast.LENGTH_LONG)
            // .show();
            if (url.contains("http://v.youku.com/")) {
                Intent intent = new Intent();
                Bundle bundle = new Bundle();
                bundle.putString("url", url);
                bundle.putString("title", "");
                intent.putExtras(bundle);
                intent.setClass(SearchResultActvity.this, VideoActivity.class);
                startActivity(intent);
                overridePendingTransition(R.anim.enter_bottom_to_up,
                        R.anim.exit);
            }
            return super.shouldOverrideUrlLoading(view, url);

        }

        @Override
        public void onPageFinished(WebView view, String url) {
            // progress.setVisibility(View.GONE);
            Log.i("wxl", "onPageFinished url=" + url);

            Toast.makeText(SearchResultActvity.this, "onPageFinished=" + url,
                    Toast.LENGTH_LONG).show();
            super.onPageFinished(view, url);
        }

    }

    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (mWebview.canGoBack() && keyCode == KeyEvent.KEYCODE_BACK) {
            mWebview.goBack(); // goBack()表示返回webView的上一页面
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

}

115、Android 代码设置Drawableleft

Android中有时需动态设置控件四周的drawble图片这个时候就需要调用 setCompoundDrawables(left, top, right, bottom)四个参数类型都是drawable

Button继承TextView所以可以采用相同的设置方法

方法一.XML方式


方法二.JAVA代码

Drawable img_on, img_off;
Resources res = getResources();
img_off = res.getDrawable(R.drawable.btn_strip_mark_off);
//调用setCompoundDrawables时,必须调用Drawable.setBounds()方法,否则图片不显示
img_off.setBounds(0, 0, img_off.getMinimumWidth(), img_off.getMinimumHeight());
btn.setCompoundDrawables(img_off, null, null, null); //设置左图标

114、Json解析

1)、
http://v.youku.com/player/getPlayList/VideoIDS/XNzI3MzE2ODk2
String fileid;
    String sid;
    String p1, p2;
String result = responseInfo.result;
                        JSONObject jsobj;
                        String mp4id = null;
                        String flvid = null;
                        String format = null;
                        JSONObject obj3 = null;
                        try {
                            jsobj = new JSONObject(result);
                            JSONArray jsonarr = jsobj.getJSONArray("data");
                            JSONObject obj1 = jsonarr.getJSONObject(0);
                            seed = obj1.getDouble("seed");
                            JSONObject obj2 = obj1
                                    .getJSONObject("streamfileids");
                            fileid = obj2.getString("mp4");
                            obj3 = obj1.getJSONObject("segs");
                            JSONArray mp4arr = obj3.getJSONArray("mp4");

                            JSONObject o = mp4arr.getJSONObject(0);
                            p2 = o.getString("k");
                            Log.d("wxl", "size=" + o.getString("size"));
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
2)、
Gson gson = new Gson();  
Person person = gson.fromJson(json, Person.class);3)、json = "[{\"name\":\"coolxing\", \"age\"=24, \"male\":true, \"address\":{\"street\":\"huiLongGuan\", \"city\":\"beijing\", \"country\":\"china\"}}, {\"name\":\"min\", \"age\"=20, \"male\":false, \"address\":{\"street\":\"heiShiJiao\", \"city\":\"daLian\", \"country\":\"china\"}}]"
采用android内置的org.json包解析JSON数组.
List<Person> persons = new ArrayList<Person>();  
JSONArray jsonArray = new JSONArray(json);  
for(int i = 0; i < jsonArray.length(); i++) {  
    JSONObject jsonObject = jsonArray.getJSONObject(i);  
    String name = jsonObject.getString("name");  
    int age = jsonObject.getInt("age");  
    boolean male = jsonObject.getBoolean("male");  
    JSONObject addressJSON = jsonObject.getJSONObject("address");  
    String street = addressJSON.getString("street");  
    String city = addressJSON.getString("city");  
    String country = addressJSON.getString("country");  
    Address address = new Address(street, city, country);  
    Person person = new Person(name, age, male, address);  
    persons.add(person);  
}  
System.out.println(persons);
采用gson库解析JSON数组
Gson gson = new Gson();  
Type listType = new TypeToken<List<Person>>(){}.getType();  
List<Person> persons = gson.fromJson(json, listType);  
(4) {"ret":0,"pay_token":"014FEA19395DCC64C64A176A305E9624","pf":"desktop_m_qq-10000144-android-2002-","query_authority_cost":265,"authority_cost":6066,"openid":"0B494E1BAB8629C46F9AA760B3B7BA48","expires_in":7776000,"pfkey":"53284a43a87afa13898ee13d28be9317","msg":"","access_token":"13625DA4E43FF130B27D09A3B9AB975A","login_cost":928}
JSONObject jSONObject = (JSONObject) response;
            try {
                Log.d("wxl", "openid=" + jSONObject.getString("openid"));
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
Android技术交流群

②群:376526418 剩者为王②群
③群:370527306 剩者为王③群
如果您喜欢此博客,读后受益匪浅,感觉对您的日后的工作有一定的帮助,
那不妨支付宝扫描以下二维码,小额赞助一下作者一杯咖啡费 #^_^#

本文出自吴小龙同學,欢迎转载,转载请标明来源地址:
http://wuxiaolong.me/android/2014/12/29/Android/ 
arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()