android开发中遇到的问题汇总

Android 面试题 专栏收录该内容
10 篇文章 0 订阅
android开发中遇到的问题汇总(五),android汇总


127.ANDROID仿IOS时间_ANDROID仿IOS弹出提示框
http://dwtedx.com/itshare_297.html


128. Android TextView drawableLeft 在代码中实现
方法1


Drawable drawable= getResources().getDrawable(R.drawable.drawable); 
/// 这一步必须要做,否则不会显示. 
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); 
myTextview.setCompoundDrawables(drawable,null,null,null);


方法2


public void setCompoundDrawablesWithIntrinsicBounds (Drawable left, 
Drawable top, Drawable right, Drawable bottom)


129. /* 去锯齿 */ paint.setAntiAlias(true);
130.android 画图之setXfermode
http://blog.csdn.net/wm111/article/details/7299294 
setXfermode


设置两张图片相交时的模式 


我们知道 在正常的情况下,在已有的图像上绘图将会在其上面添加一层新的形状。 如果新的Paint是完全不透明的,那么它将完全遮挡住下面的Paint; 


而setXfermode就可以来解决这个问题 




一般来说 用法是这样的 
[java] view plaincopy


    Canvas canvas = new Canvas(bitmap1);  


    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));  


    canvas.drawBitmap(mask, 0f, 0f, paint);    
131. ubuntu android cordova
Setting up PhoneGap on Ubuntu for Android app development
132.webview的页面都finish了居然还能听到视频播放的声音,查了下发现webview的
onResume方法可以继续播放,
onPause可以暂停播放,
但是这两个方法都是在Added in API level 11添加的,所以需要用反射来完成。
停止播放:在页面的onPause方法中使用:
webView.getClass().getMethod("onPause").invoke(webView,(Object[])null);
继续播放:在页面的onResume方法中使用:
webView.getClass().getMethod("onResume").invoke(webView,(Object[])null);
这样就可以控制视频的暂停和继续播放了。


在webView的Activity配置里面加上:
android:hardwareAccelerated="true"
133.Create new project on Android, Error: Studio Unknown host ‘services.gradle.org’
解决方法
please try following steps:
Go to..


File --> settings --> HTTP Proxy [Under IDE Settings] --> Auto-detect proxy settings


you can also use the test connection button and check with google.com if it works or not
[关于红杏的公益代理, Android Studio以及freso的编译](http://www.liaohuqiu.net/cn/posts/about-red-apricot-and-compiling-fresco/)
134.ListView.setOnItemClickListener 点击无效
如果ListView中的单个Item的view中存在checkbox,button等view,会导致ListView.setOnItemClickListener无效,


事件会被子View捕获到,ListView无法捕获处理该事件.


解决方法:


在checkbox、button对应的view处加android:focusable="false"
   android:clickable="false"android:focusableInTouchMode="false"


其中focusable是关键






从OnClickListener调用getSelectedItemPosition(),Click 和selection 是不相关的,Selection是通过D-pad or trackball 来操作的,Click通常是点击操作的。






arg2参数才是点击事件位置的参数
135.listview addheader 如果有多个header,可以把多个header封装。把封装后的view作为header
136.emojicon
emojicon, https://github.com/rockerhieu/emojicon 
emojicon, https://github.com/ankushsachdeva/emojicon


137.新闻评论页,如何实现盖楼,listview的高度自适应?
控件的高度 设为wrap_content
138.android改变CheckBox和后面文字的间距 http://www.haodaima.net/art/1891872
解决方法:
1.设置android:paddingLeft="25dip",就可以了。
2.设置checkbox的背景图片。系统默认的给checkbox加的有一个透明的背景。
139.volley请求超时 如何处理 http://stackoverflow.com/questions/17094718/android-volley-timeout
myRequest.setRetryPolicy(new DefaultRetryPolicy(
            MY_SOCKET_TIMEOUT_MS, 
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));  
140.Listview getItemViewType的使用 对于不同xml,使用多个viewhold
141.Android “Only the original thread that created a view hierarchy can touch its views.” http://stackoverflow.com/questions/5161951/android-only-the-original-thread-that-created-a-view-hierarchy-can-touch-its-vi
thread = new Thread(){
    @Override
    public void run() {
        try {
            synchronized (this) {
                wait(5000);


                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        dbloadingInfo.setVisibility(View.VISIBLE);
                        bar.setVisibility(View.INVISIBLE);
                        loadingText.setVisibility(View.INVISIBLE);
                    }
                });


            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Intent mainActivity = new Intent(getApplicationContext(),MainActivity.class);
        startActivity(mainActivity);
    };
    };  
    thread.start();
142.Java SDK提供了对上述三种压缩技术的支持:Inflater类和Deflater类直接用zlib库对数据压缩/
解压缩,GZIPInputStream类和GZIPOutputStream类提供了对gzip格式的支持,ZipFile、Zi
pInputStream、ZipOutputStream则用于处理zip格式的文件。


所以,你应当根据你的具体需求,选择不同的压缩技术:如果只需要压缩/解压缩数据,你
可以直接用zlib实现,如果需要生成gzip格式的文件或解压其他工具的压缩结果,你就必须
用gzip或zip等相关的类来处理了。
143.利用volley进行http设置请求头、超时及请求参数设置(post)
这里以post请求说明,get请求相似设置请求头及超时。


1.自定义request,继承com.android.volley.Request


2.构造方法实现(basecallback,为自定义的监听,实现Response.Listener,ErrorListener接口)--post请求


 public BaseRequest(String url,String params, BaseCallback<T> callback)
    {
    super(Method.POST, url, callback);
    this.callback = callback;
    this.params = params;
    Log.e(TAG, "request:" + params);
    setShouldCache(false);
    }
3.请求头设置:重写getHeaders方法


 @Override
    public Map<String, String> getHeaders() throws AuthFailureError
    {
    Map<String, String> headers = new HashMap<String, String>();
    headers.put("Charset", "UTF-8");
    headers.put("Content-Type", "application/x-javascript");
    headers.put("Accept-Encoding", "gzip,deflate");
    return headers;
    }
设置字符集为UTF-8,并采用gzip压缩传输


4.超时设置:重写getRetryPolicy方法


 @Override
    public RetryPolicy getRetryPolicy()
    {
    RetryPolicy retryPolicy = new DefaultRetryPolicy(SOCKET_TIMEOUT, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
    return retryPolicy;
    }
5.请求参数组装:重写getBody方法


 @Override
    public byte[] getBody() throws AuthFailureError
    {
    return params == null ? super.getBody() : params.getBytes();
    }
144. android handler的警告Handler Class Should be Static or Leaks Occur
在使用Handler更新UI的时候,我是这样写的:




public class SampleActivity extends Activity {


  private final Handler mLeakyHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
      // TODO
    }
  }
}
看起来很正常的,但是 Android Lint 却给出了警告:


This Handler class should be static or leaks might occur


意思是说:这个Handler 必须是static的,否则就会引发内存泄露。


其实,对于这个问题,Android Framework 的工程师 Romain Guy 早已经在Google论坛上做出过解释,并且给出了他的建议写法:






I wrote that debugging code because of a couple of memory leaks I 
found in the Android codebase. Like you said, a Message has a 
reference to the Handler which, when it's inner and non-static, has a 
reference to the outer this (an Activity for instance.) If the Message 
lives in the queue for a long time, which happens fairly easily when 
posting a delayed message for instance, you keep a reference to the 
Activity and "leak" all the views and resources. It gets even worse 
when you obtain a Message and don't post it right away but keep it 
somewhere (for instance in a static structure) for later use. 






他的建议写法是:




class OuterClass {


  class InnerClass {
    private final WeakReference<OuterClass> mTarget;


    InnerClass(OuterClass target) {
       mTarget = new WeakReference<OuterClass>(target);
    }


    void doSomething() {
       OuterClass target = mTarget.get();
       if (target != null) {
            target.do();    
       }
     }
}
下面,我们进一步解释一下:


1.Android App启动的时候,Android Framework 为主线程创建一个Looper对象,这个Looper对象将贯穿这个App的整个生命周期,它实现了一个消息队列(Message  Queue),并且开启一个循环来处理Message对象。而Framework的主要事件都包含着内部Message对象,当这些事件被触发的时候,Message对象会被加到消息队列中执行。
2.当一个Handler被实例化时(如上面那样),它将和主线程Looper对象的消息队列相关联,被推到消息队列中的Message对象将持有一个Handler的引用以便于当Looper处理到这个Message的时候,Framework执行Handler的handleMessage(Message)方法。
3.在 Java 语言中,非静态匿名内部类将持有一个对外部类的隐式引用,而静态内部类则不会。


到底内存泄露是在哪里发生的呢?以下面代码为例:




public class SampleActivity extends Activity {


  private final Handler mLeakyHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
      // ...
    }
  }


  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    // Post a message and delay its execution for 10 minutes.
    mLeakyHandler.postDelayed(new Runnable() {
      @Override
      public void run() { }
    }, 60 * 10 * 1000);


    // Go back to the previous Activity.
    finish();
  }
}
当Activity被finish()掉,Message 将存在于消息队列中长达10分钟的时间才会被执行到。这个Message持有一个对Handler的引用,Handler也会持有一个对于外部类(SampleActivity)的隐式引用,这些引用在Message被执行前将一直保持,这样会保证Activity的上下文不被垃圾回收机制回收,同时也会泄露应用程序的资源(views and resources)。


为解决这个问题,下面这段代码中的Handler则是一个静态匿名内部类。静态匿名内部类不会持有一个对外部类的隐式引用,因此Activity将不会被泄露。如果你需要在Handler中调用外部Activity的方法,就让Handler持有一个对Activity的WeakReference,这样就不会泄露Activity的上下文了,如下所示:




public class SampleActivity extends Activity {


  /**
   * Instances of static inner classes do not hold an implicit
   * reference to their outer class.
   */
  private static class MyHandler extends Handler {
    private final WeakReference<SampleActivity> mActivity;


    public MyHandler(SampleActivity activity) {
      mActivity = new WeakReference<SampleActivity>(activity);
    }


    @Override
    public void handleMessage(Message msg) {
      SampleActivity activity = mActivity.get();
      if (activity != null) {
    // ...
      }
    }
  }


  private final MyHandler mHandler = new MyHandler(this);


  /**
   * Instances of anonymous classes do not hold an implicit
   * reference to their outer class when they are "static".
   */
  private static final Runnable sRunnable = new Runnable() {
      @Override
      public void run() { }
  };


  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    // Post a message and delay its execution for 10 minutes.
    mHandler.postDelayed(sRunnable, 60 * 10 * 1000);


    // Go back to the previous Activity.
    finish();
  }
}
总结:
在实际开发中,如果内部类的生命周期和Activity的生命周期不一致(比如上面那种,Activity finish()之后要等10分钟,内部类的实例才会执行),则在Activity中要避免使用非静态的内部类,这种情况,就使用一个静态内部类,同时持有一个对Activity的WeakReference。
146.FragmentPagerAdapter (getSupportFragmentManager() ) You must call removeView() on the child’s parent
How to solve for viewpager : The specified child already has a parent. You must call removeView() on the child's parent first
http://stackoverflow.com/questions/13559353/how-to-solve-for-viewpager-the-specified-child-already-has-a-parent-you-must 
解决方法 
I had the same problem when I used


View res = inflater.inflate(R.layout.fragment_guide_search, container);
inside Fragment.onCreateView(...


You must call


View res = inflater.inflate(R.layout.fragment_guide_search, container, false);
or


View res = inflater.inflate(R.layout.fragment_guide_search, null);
参考:


[1]https://groups.google.com/forum/?fromgroups=#!msg/android-developers/1aPZXZG6kWk/lIYDavGYn5UJ 
[2]http://www.androiddesignpatterns.com/2013/01/inner-class-handler-memory-leak.html 
[3]http://stackoverflow.com/questions/11407943/this-handler-class-should-be-static-or-leaks-might-occur-incominghandler


145. 使用代码为textview设置drawableLeft
Drawable drawable= getResources().getDrawable(R.drawable.drawable);  
/// 这一步必须要做,否则不会显示.  
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());  
myTextview.setCompoundDrawables(drawable,null,null,null);  
146.Android如何在java代码中设置margin
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);  
lp.setMargins(10, 20, 30, 40);  
imageView.setLayoutParams(lp);
147.出错了表现:Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536
解决:谷歌出了 新的Multidex支持库  androidstudio    https://developer.android.com/tools/building/multidex.html
    android {
            compileSdkVersion 21
            buildToolsVersion "21.1.0"


            defaultConfig {
            ...
            minSdkVersion 14
            targetSdkVersion 21
            ...


            // Enabling multidex support.
            multiDexEnabled true
               }
              ...
        }


        dependencies {
          compile 'com.android.support:multidex:1.0.0'
        }
148.How to get Nautilus-scripts working on Ubuntu 14.04?
nautilus-actions-config-tool


http://askubuntu.com/questions/281062/how-to-get-nautilus-scripts-working-on-ubuntu-13-04  设置好之后 nautilus -q。重启下nautilus服务生效


http://ubuntuhandbook.org/index.php/2014/04/ubuntu-14-04-add-open-as-rootadministrator-to-context-menu/
149. imageloader显示图片所使用的uri:
String imageUri = "http://site.com/image.png"; // from Web
String imageUri = "file:///mnt/sdcard/image.png"; // from SD card
String imageUri = "content://media/external/audio/albumart/13"; // from content provider
String imageUri = "assets://image.png"; // from assets
String imageUri = "drawable://" + R.drawable.image; // from drawables (only images, non-9patch)
注意:使用drawable://除非你真的需要他。时刻要注意使用本地图片加载方法:setImageResource带代替ImageLoader。
五,有用的信息
1,ImageLoader.getInstance().init(config); // 在应用开启的时候初始化。
2,<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>sd卡缓存是需要写入权限
3,ImageLoader根据ImageView的width,height确定图片的宽高。
4,如果经常出现OOM
   ①减少配置之中线程池的大小,(.threadPoolSize).推荐1-5;
   ②使用.bitmapConfig(Bitmap.config.RGB_565)代替ARGB_8888;
   ③使用.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者try.imageScaleType(ImageScaleType.EXACTLY);
   ④避免使用RoundedBitmapDisplayer.他会创建新的ARGB_8888格式的Bitmap对象;
   ⑤使用.memoryCache(new WeakMemoryCache()),不要使用.cacheInMemory();
5,内存缓存,sd卡缓存,显示图片,可以使用已经初始化过的实现;
6,为了避免使用list,grid,scroll,你可以使用
boolean pauseOnScroll = false; // or true
boolean pauseOnFling = true; // or false
PauseOnScrollListener listener = new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling);
listView.setOnScrollListener(listener);
150.View’s getWidth() and getHeight() returning 0
You should use: image1.getLayoutParams().width;    http://stackoverflow.com/questions/18268915/views-getwidth-and-getheight-returning-0
151.GridView的行数问题
在gridview里边设置属性 android:numColumns="3";意思是三列 然后在BaseAdapter的 getCount()方法 里边返回9。这样就可以平分为3行3列了
152.ArrayList和数组间的相互转换 http://wanglihu.iteye.com/blog/243238
ArrayList提供public <T> T[] toArray(T[] a)


public static <T> List<T> asList(T... a)
153.Unexpected response code 500
网页已经被关闭
还有就是,一般由于内部服务器错误造成的。
  服务器关闭或者服务器升级而造成的资源无法访问
  由于服务器太忙而造成的,此时无法处理请求。通讯量超出 Web 站 点的能力
154. banner广告及view pager 的小圆点指示器 CirclePageIndicator http://9437752.blog.51cto.com/9427752/1580984
155.使用ViewPager+GridView实现横向滑动的效果 http://blog.csdn.net/developer_jiangqq/article/details/9364501
156.CircleImageView https://github.com/hdodenhof/CircleImageView
157.ViewPager FragmentPagerAdapter Nullpointer fragmentpageradapter和pageradapter的区别。使用的场景。
158.unable to have ViewPager WRAP_CONTENT http://stackoverflow.com/questions/8394681/android-i-am-unable-to-have-viewpager-wrap-content
Overriding onMeasure of your ViewPager as follows will make it get the height of the biggest child it currently has.


@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {


    int height = 0;
    for(int i = 0; i < getChildCount(); i++) {
    View child = getChildAt(i);
    child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
    int h = child.getMeasuredHeight();
    if(h > height) height = h;
    } 


    heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);


    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
} 
159.在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局控件和AnalogClock、Chronometer、Button、ImageButton、ImageView、ProgressBar、TextView、ViewFlipper、ListView、GridView、StackView和AdapterViewFlipper这些显示控件,不支持这些类的子类或Android提供的其他控件。否则会引起ClassNotFoundException异常
160.Android模拟器Genymotion加载ARM架构so文件
http://www.eoeandroid.com/thread-552875-1-1.html
https://www.genymotion.com/#!/support?chapter=collapse-logs#faq
161.Viewpager wrap_hight导致不显示。 重写ViewPager
 /**
     * for bug   : unable to have ViewPager WRAP_CONTENT
     */
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int hight = 0;
    for (int i = 0; i < getChildCount(); i++) {
        View child = getChildAt(i);
        child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
        int h = child.getMeasuredHeight();
        if (h > hight) hight = h;


    }
    heightMeasureSpec = MeasureSpec.makeMeasureSpec(hight, MeasureSpec.EXACTLY);
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    } 
162.选择项有RadioGroup和另外一个button组成 点击button的时候,清除radiogroup中选中的radiobutton。调用radiogroup的clearCheck方法即可
163.gridview columnnum。上传照片
164. 9.png Error:Must have one-pixel frame that is either transparent or white. -xxx/app/src/main/res/drawable-xhdpi/icon_addpic_focused.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
解决方法如下 
this is the problem with latest adt that is 20.0.3. you can instead rename the .9.png to .png and start working. i think this is the bug with the adt only, since for 18.0.0 version adt it doesnt prompts for this type of error and works fine


165. IntentRecieverLeakedException, Are you missing a call to unregisterReceiver() ? in android
注册广播接收者有两种方式,一种在清单文件中注册。这个是长期有效的。另外一种是。在activity中注册,这种注册的生命周期在actity的生命周期内,还有第二种注册不要registerReceiver必须要和unregisterReceiver配套使用,否则会出现上述问题。
http://stackoverflow.com/questions/9078390/intentrecieverleakedexception-are-you-missing-a-call-to-unregisterreceiver
167. packagingOptions {
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
}
168.CLEAN   
Android Studio fails to debug with error org.gradle.process.internal.ExecException 
Error:Execution failed for task ‘:app:dexDebug’.


com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process ‘command ‘C:\Program Files\Java\jdk1.7.0_11\bin\java.exe” finished with non-zero exit value 2


169.Eclipse混淆文件导入Android Studio Gradle编译报input jar file is specified twice http://blog.csdn.net/X_i_a_o_H_a_i/article/details/41979983 
原因是build.gradle文件配置了


dependencies { 
compile fileTree(include: ‘*.jar’, dir: ‘libs’)


}


里面已经添加过jar包,混淆文件proguard-rules.pro里面又加了句-libraryjars libs/.jar,将-libraryjars libs/.jar 前面用#号注释或者直接删掉即可。


170.key.java android-stuido 中错误提示:“非法字符: \65279” http://www.cnblogs.com/littlehb/archive/2013/04/20/3032721.html
对设置为“UTF-8”编码的文件在修改后保存时自动加入了UTF-8文件签名,即BOM(将文件以十六进制形式查看,可见文件首部为“EF BB BF”).


解决方法: 
使用Notepad++去除BOM 【在IntelliJ IDEA 12使用,可成功】


具体方法:先设置以UTF-8无ROM方式编码,然后打开文件,另存此文件,覆盖掉原文件。


设置方法:格式->以UTF-8无ROM方式编码。
171.LocalBroadcastManager 解决fragment中通信的问题
最近在开发平板项目,完全是fragmentactivity+fragment的结构。看起来似乎简单,但是和以前不同的是,业务逻辑非常复杂,多处的非常规跳转,
fragment之间的数据交换,一处更新多处更新等操作,有时玩起来都心塞。项目背景介绍完毕。
现在有这样一个场景,项目需求是,后台可配置功能,也就是说app端所有的功能都是后台配置上去的动态生成,对应的功能界面如下图。
能够完成在应用内的广播发送,而且比全局广播更具优势:
1).广播只会在你的应用内发送,所以无需担心数据泄露,更加安全。
2).其他应用无法发广播给你的应用,所以也不用担心你的应用有别人可以利用的安全漏洞
3).相比较全局广播,它不需要发送给整个系统,所以更加高效。


2. 使用方式
广播注册:
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(getActivity());
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION);
myBroadcastReciver = new MyBroadcastReciver();
localBroadcastManager.registerReceiver(myBroadcastReciver, filter);
复制代码
广播发送:
Intent intent = new Inten();
intent.setAction(SaleLeftFragment.ACTION);
intent.putExtra(TAG, data);
LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);
复制代码
3.使用注意
在使用的时候,请关注以下几点:
1).LocalBroadcastManager注册广播只能通过代码注册的方式。
2).LocalBroadcastManager注册广播后,一定要记得取消监听。
3).重点的重点,使用LocalBroadcastManager注册的广播,您在发送广播的时候务必使用
Fragment间的广播消息接收


广播注册,可以写在Activity(onCreate),也可以写在Fragment(onActivityCreated)里。


复制代码
LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(getActivity());
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.intent.action.CART_BROADCAST");//建议把它写一个公共的变量,这里方便阅读就不写了。
BroadcastReceiver mItemViewListClickReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent){
            System.out.println("OK");
        }
 };
 broadcastManager.registerReceiver(mItemViewListClickReceiver, intentFilter);
复制代码










发送广播


Intent intent = new Intent("android.intent.action.CART_BROADCAST");
LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);
172.[How can I] Change the password, so I can share it with others and let them sign
Using keytool:


keytool -storepasswd -keystore /path/to/keystore
Enter keystore password:  changeit
New keystore password:  new-password
Re-enter new keystore password:  new-password
173.How to create a release signed apk file using Gradle?
http://stackoverflow.com/questions/18328730/how-to-create-a-release-signed-apk-file-using-gradle


174.No activity found to handle intent action.dial
Uri.parse(“tel:” + a1) 
Android 调用系统Email –多附件 
Intent.ACTION_SENDTO 无附件的发送 
Intent.ACTION_SEND 带附件的发送 
Intent.ACTION_SEND_MULTIPLE 带有多附件的发送 
Intent data=new Intent(Intent.ACTION_SENDTO); 
data.setData(Uri.parse(“mailto:455245521@qq.com”)); 
data.putExtra(Intent.EXTRA_SUBJECT, “这是标题”); 
data.putExtra(Intent.EXTRA_TEXT, “这是内容”); 
startActivity(data);


175.HTML 中有用的字符实体
注释:实体名称对大小写敏感! 
显示结果 描述 实体名称 实体编号 
空格     
< 小于号 < <


大于号 > > 
& 和号 & & 
” 引号 " " 
’ 撇号 ' (IE不支持) ' 
¢ 分 ¢ ¢ 
£ 镑 £ £ 
¥ 日圆 ¥ ¥ 
€ 欧元 € € 
§ 小节 § § 
© 版权 © © 
® 注册商标 ® ® 
™ 商标 ™ ™ 
× 乘号 × × 
÷ 除号 ÷ ÷


176.Generating signed release APK using Gradle https://github.com/almalkawi/Android-Guide/wiki/Generating-signed-release-APK-using-Gradle
 How to create a release signed apk file using Gradle?   http://stackoverflow.com/questions/18328730/how-to-create-a-release-signed-apk-file-using-gradle
android {
    compileSdkVersion 17


    signingConfigs {
    releaseSigning {
        storeFile file(System.getenv("ANDROID_KEYSTORE"))
        storePassword System.console().readLine("\nStore password: ")
        keyAlias System.getenv("ANDROID_KEYALIAS")
        keyPassword System.console().readLine("Key password: ")
    }
    }


    buildTypes {
    release {
        signingConfig signingConfigs.releaseSigning
    }
    }
}
Now, you can generate the signed and zipaligned release APK using the Gradle task:


./gradlew assembleRelease
177.Android Studio: How to use Monitor(DDMS) tool to debug application step by step?
Go to "Tools > Android > Android Device Monitor" in v0.8.6. That will pull up the DDMS eclipse perspective.


 dump viewhierarchy for ui automator 可以查看应用的布局,当对某个app布局感兴趣时,可以采用此种方式查看此app的布局,相当于布局反编译功能。
178. 如何通过java代码设置textview字体加粗。
textView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));//加粗  
179.qickreturn swiperefreshlayout
180. viewpager中彻底性动态添加、删除Fragment http://stackoverflow.com/questions/10396321/remove-fragment-page-from-viewpager-in-android
viewpager在加载当前页的时候已经将pager页左右页的内容加载进内存里了,这样才保证了viewpager左右滑动的时候的流畅性;
为了解决彻底删除fragment,我们要做的是:
1.将FragmentPagerAdapter 替换成FragmentStatePagerAdapter,因为前者只要加载过,fragment中的视图就一直在内存中,在这个过程中无论你怎么刷新,清除都是无用的,直至程序退出; 后者 可以满足我们的需求。
2.我们可以重写Adapter的方法--getItemPosition(),让其返回PagerAdapter.POSITION_NONE即可;
181. Uri.encode
182.omniplan mac
183.androidstudio svn delete
184.GreenDao query OR within AND
http://stackoverflow.com/questions/22785327/greendao-query-or-within-and


QueryBuilder.and() and QueryBuilder.or() are used to combine WhereConditions. The resulting WhereConditions have to be used inside QueryBuilder.where() (which will combine the conditions using AND) or QueryBuilder.whereOr().
185.greendao 删除某个对象
http://www.cnblogs.com/spring87/p/4364769.html 
1.public void deleteCityInfo(int cityId) 
2.{ 
3.QueryBuilder qb = cityInfoDao.queryBuilder(); 
4.DeleteQuery bd = qb.where(Properties.CityId.eq(cityId)).buildDelete(); 
5.bd.executeDeleteWithoutDetachingEntities(); 
6.}


187. androidstudio ctrl+shift+t 模糊搜索类
                ctrl+o 本文件的函数
        ctrl+g  全局搜索类 变量 函数
               alter+insert 快速插入getset等
    Ctrl+Shift+F7 可以高亮当前元素在当前文件中的使用
    Android Studio 如何提示函数用法?   先选中,然后按F2
188.Fragment的通信有关问题, 新建Fragment为何不要在构造方法中传递参数
http://233.io/article/1057296.html


189.
在理解反射的时候,不得不说一下内存。 
先理解一下JVM的三个区:堆区,栈区,和方法去(静态区)。 
堆区:存放所有的对象,每个对象都有一个与其对应的class信息。在JVM中只有一个堆区,堆区被所有的线程共享。 
栈区:存放所有基础数据类型的对象和所有自定义对象的引用,每个线程包含一个栈区。每个栈区中的数据都是私有的,其他栈不能访问。 
栈分为三部分: 
基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。 
方法区:即静态区,被所有的线程共享。方法区包含所有的class和static变量。它们都是唯一的。


在启动一个java虚拟机时,虚拟机要加载你程序里所用到的类 ,这个进程会首先跑到jdk中(在jdk的jre/lib/ext文件夹里找那些jar文件),如果没有找到,会去classpath里设置的路径去找。
在找到要执行的类时:
1.首先将找到的类的信息加载到运行时数据区的方法区。这个过程叫做类的加载。所以一下static类型的在类的加载过程中就已经放到了方法区。所以不用实例化就能用一个static类型的方法。
2.加载完成后,在new一个类时,首先就是去方法区看看有没有这个类的信息。如果没有这个类的信息,先装载这个类。then,加载完成后,会在堆区为new的这个类分配内存,有了内存就有了实例,而这个实例指向的是方法区的该类信息。其实就是存放了在方法区的地址。而反射就是利用了这一点。
android开发中遇到的问题汇总【六】,android汇总


190. Genymotion Crash after a few minutes
E/eglCodecCommon(2163): writeFully: failed: Broken pipe


http://stackoverflow.com/questions/23855115/genymotion-crash-after-a-few-minutes


It's not really caused by your application, so don't worry.


It often happens when you computer goes in sleep mode and when you come back Genymotion will throw this exception (it happens to me very often).


In your specific case sounds like the device goes in sleep mode so a way to fix it is simply to enable "Always stay awake" in developers options.
192. A WebView method was called on thread ‘Timer-1’. All WebView methods must be called on the UI thread. Future versions of WebView may not support use on other threads.
java.lang.IllegalStateException: Timer was canceled 
at java.util.Timer.scheduleImpl(Timer.java:561) 
at java.util.Timer.schedule(Timer.java:481) 
at com.jetsun.hbfc.activity.base.CommonWebViewActivity$3.onPageStarted(CommonWebViewActivity.java:178)


Webview reload page get force close


Change your TimerTask to the following:


new TimerTask() { 
@Override 
public void run() { 
runOnUiThread(new Runnable() { 
public void run() { 
wvNovaMenzaCammera.reload(); 
} 
}); 
} 
}


193.http://blog.csdn.net/xieyuooo/article/details/8607220
Timer与TimerTask的真正原理&使用介绍


194.http://233.io/article/1057296.html Fragment的通信有关问题, 新建Fragment为何不要在构造方法中传递参数
195.Add a new file in Intellij doesn’t add to subversion
http://stackoverflow.com/questions/2817452/add-a-new-file-in-intellij-doesnt-add-to-subversion
    Go to File -> Settings -> Version control -> Confirmation -> When files are created You're probably looking for "Add silently".
196.使用Android Studio的lint清除无用的资源文件 http://waychel.com/shi-yong-android-studiode-lintqing-chu-wu-yong-de-zi-yuan-wen-jian/
197. Android应用程序release打签名包时,出现错误:”XXX” is not translated in “af” (Afrikaans), “am” (Amharic), “ar” (Arabic)…..
eclipse 
http://blog.csdn.net/u012264122/article/details/39371343


androidstudio http://stackoverflow.com/questions/20699147/gradle-build-fails-on-lint-task


// This is important, it will run lint checks but won't abort build
  lintOptions {
      abortOnError false
  }




if abortOnError false will not resolve your problem, you can try this.


lintOptions {
    checkReleaseBuilds false
}
198.
全面提高Ubuntu Linux操作系统运行速度


1.六招让你的Ubuntu马上提速  http://article.yeeyan.org/view/205625/294577




       Where did the startup-applications-preferences program go?  ubuntu satartup applications preference
     http://askubuntu.com/questions/159887/where-did-the-startup-applications-preferences-program-go
    The if you can't find the program anywhere, try running gnome-session-properties from the command line (or alt+f2).


    If it's not installed, I'm sure you can install the package gnome-session-properties.


2. 将localhost化名为主机名


    据说这个方法可以改善使用Ubuntu一段后,在GNOME中启动应用程序变慢的问题


    # vi /etc/hosts


    127.0.0.1 localhost


    127.0.1.1 Ubuntu


    ===>


    127.0.0.1 localhost Ubuntu


    127.0.1.1 Ubuntu


    注:在第一行末尾加上主机名,也就是第二行的那个名字。


3.安装preload


    可以把一些常用到的lib库和应用程序预加载到内存,以提高程序的启动速度


    # apt-get install preload
199.volley由于网络访问比较慢,导致访问两次的现象 http://stackoverflow.com/questions/22428343/android-volley-double-post-when-have-slow-request?
    http://stackoverflow.com/questions/3352424/httpurlconnection-openconnection-fails-second-time
200.当你想让一个高度值不足scrollview的子控件fillparent的时候,单独的定义 android:layout_height=”fill_parent”是不起作用的,必须加上fillviewport属性,当子控件的高度值大于 scrollview的高度时,这个标签就没有任何意义了。
201.activity FLAG_ACTIVITY_REORDER_TO_FRONT 无法startActivity http://blog.csdn.net/mingli198611/article/details/8678513
202. Genymotion模拟器运行项目 jPush报错jpush Couldn’t load jpush: findLibrary returned null
at cn.jpush.android.api.JPushInterface.init(Unknown Source)


203.androidstudio检查更新。Android Studio支持自动检查更新。之前尚未发布正式版时,一周有时会有几次更新。你可以设置检查的类型,用以控制更新类型。
Settings --> Updates 。勾选 Check for updates in channel ,即开通了自动检查更新。你可以禁用自动检查更新。右侧的列表,是更新通道。
Stable Channel : 正式版本通道,只会获取最新的正式版本。
Beta Channel : 测试版本通道,只会获取最新的测试版本。
Dev Channel : 开发发布通道,只会获取最新的开发版本。
Canary Channel : 预览发布通道,只会获取最新的预览版本。rc  release candidates
以上4个通道中, Stable Channel 最稳定,问题相对较少, Canary Channel 能获得最新版本,问题相对较多。


204.AndroidのActivity之Listview组件快速拖动 android:fastScrollEnabled=”true” android:focusable=”true”
205. Lint: How to ignore “ is not translated in ” errors?
http://stackoverflow.com/questions/11443996/lint-how-to-ignore-key-is-not-translated-in-language-errors 
To ignore this in a gradle build add this to the android section of your build file:


lintOptions { 
disable ‘MissingTranslation’ 
}


Authentication Error errorcode: 201 uid: -1 appid -1 msg: APP被用户自己禁用


ubuntu apktool 2.0 Exception in thread “main” brut.androlib.err.UndefinedResObject


keytool -list -keystore SportsApp.keystore


206.Exception in thread “main” brut.androlib.AndrolibException: Could not decode arsc file
at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:56)
at brut.androlib.res.AndrolibResources.getResPackagesFromApk(AndrolibResources.java:491)
at brut.androlib.res.AndrolibResources.loadMainPkg(AndrolibResources.java:74)
at brut.androlib.res.AndrolibResources.getResTable(AndrolibResources.java:66)
at brut.androlib.Androlib.getResTable(Androlib.java:50)
at brut.androlib.ApkDecoder.getResTable(ApkDecoder.java:189)
at brut.androlib.ApkDecoder.decode(ApkDecoder.java:114)
at brut.apktool.Main.cmdDecode(Main.java:146)
at brut.apktool.Main.main(Main.java:77)
Caused by: java.io.IOException: Expected: 0x001c0001, got: 0x00000000 
at brut.util.ExtDataInput.skipCheckInt(ExtDataInput.java:48) 
at brut.androlib.res.decoder.StringBlock.read(StringBlock.java:44) 
at brut.androlib.res.decoder.ARSCDecoder.readPackage(ARSCDecoder.java:102) 
at brut.androlib.res.decoder.ARSCDecoder.readTable(ARSCDecoder.java:83) 
at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:49) 
… 8 more


It seems there’s some problem in building the resources while recompiling the apk. what you can do is, when you decompile your apk use this command


apktool d -f -r apkfilename.apk 
here -f is to replace previous decompiled apk’s code and -r is to ignore the decompiling of resources.


this would prevent the resources from being decompiled and will simply copy the same resources when you recompile the apk.


208 android sharesdk微信分享 创建应用时所需的应用签名怎么得到
根据这个页面提供的一个工具 签名生成工具 
https://open.weixin.qq.com/cgi-bin/readtemplate?t=resource/app_download_android_tmpl&lang=zh_CN 
Android资源下载 
开发工具包 
开发第三方应用所需要的库以及文件。点击下载 
范例代码 
包含了一个完整的范例工程。该范例的使用可以参阅Android平台上手指南:HelloWeixin@Android。点击下载 
签名生成工具用于获取安装到手机的第三方应用签名的apk包。点击下载


可以一个字符串,类似于: 
应用签名:049a9fde46bfc5087f3825582208b248 
安装这个应用可以获取本手机已经安装的某个android软件,根据软件的包名,类似于: com.demo.AppX 来查找这个软件,以及获取这个软件的 应用签名。 
还有一个工具是在 
http://wiki.open.qq.com/wiki/mobile/SDK下载 
Android_SDK_V2.3.1 的tools目录下有一个 获取签名.apk ,这个也可以获取,但是我测试发现,只能显示一部分的本机应用,有些应用查不到,就麻烦了..


209.:app:lintVitalRelease
Failed converting ECJ parse tree to Lombok for file /home/yyb/work/BoShiTong/trunk/HBFC/Android/Comment/HBFC-AS2/app/src/main/java/com/jetsun/hbfc/widget/ioc/AbIocView.java 
java.lang.ClassCastException: lombok.ast.Annotation cannot be cast to lombok.ast.Expression


210. Ignoring InnerClasses attribute for an anonymous inner class
211.WebView 在Android4.4的手机上onPageFinished()回调会多调用一次(具体原因待追查)
需要尽量避免在onPageFinished()中做业务操作,否则会导致重复调用,还有可能会引起逻辑上的错误. 
onPageStarted和onPageFinished 会加载两次




android开发中遇到的问题汇总【七】
212.Android WebView常见问题及解决方案汇总
http://blog.csdn.net/t12x3456/article/details/13769731


213.Android check network connectivity on some tablets crash
java.lang.NullPointerException 
at com.xxx.Util.getNetworkState(Util.java:246)


214.What is the equivalent of Eclipse “Custom debug Keystore” in Android studio?
http://stackoverflow.com/questions/17189076/what-is-the-equivalent-of-eclipse-custom-debug-keystore-in-android-studio
215.Android Studio在调试时,修改变量的值 在“Variables”窗口中,选择需要修改的变量,然后右键,选“Set Value…”。快捷键F2
216.打开百度定位导致MyApplication中的初始化重新加载一遍。如果此时有自动登录等,会导致重新登录 而目前的凭证失效
217.android webview和js交互json对象 。通过字符串传递。然后通过jsonobject把字符串生成json对象从中获取数据。
218. Android Studio开发jni ndk
主要有以下三块 
1. Javah生成JNI头文件 
需要进入到/src/mian 这个目录下 。如果不进入这个目录等会运行javah的时候会提示: 错误: 找不到 ‘com.lcj.ndk_demo_2.HelloNDK’ 的类文件 
javah -d jni -classpath ….\build\intermediates\classes\debug com.lcj.ndk_demo_2.HelloNDK 
jni 是生成的头文件需要存放的文件夹(一般取名jni才对) 
….\build\intermediates\classes\debug 是class所在目录(Build—>Make Project生成的class文件都在这里,这是一个相对路径) 
com.lcj.ndk_demo_2.HelloNDK 是class文件的文件名(根据之前的java文件生成的) 
参考 http://wenku.baidu.com/view/105474098e9951e79b8927a3.html 
2.根据上不生成的.h文件 写.c和makefile 
3.ndk-build【这个androidstudio1.2已经集成,可以直接编译ndk,所以多一个选择】 
易出现的问题 When running the ndk-build command I get the following error:


Android NDK: Could not find application project directory !    
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it


解决方案


NDK_PROJECT_PATH is an environment variable so you don't have to include in the Android.mkfile. Is nkd-build launched in the project directory?


For more info read the docs in docs/HOWTO.html in the NDK folder where I read


Starting with NDK r4, you can simply place the file under $PROJECT/jni/ and launch the 'ndk-build' script from your project tree.


If you want to use 'ndk-build' but place the file to a different location, use a GNU Make variable override as:


ndk-build NDK_APPLICATION_MK=/path/to/your/Application.mk
219.Android下使用lamemp3库将PCM录音数据压缩为MP3格式
        文章最下面有demo 很不错 通过javah修改下,可以直接用
   来源:    http://ikinglai.blog.51cto.com/6220785/1228730
220.Android Studio 不自动弹起代码提示功能解决办法 do not auto popup code completion
升级后不自动弹起代码提醒功能了,而且变量也不标注颜色,简直是气死我了,Google了各种关键词,都没办法 
后来看到有个Power Save Mode,昨天看到笔记本发热厉害就给勾上了,是不是这个原因呢? 
取消之后一切正常,看来是省电模式下禁用了这些功能,通过反射来实现代码的autoComplete是会增加CPU运算量。


File–>Power Save Mode .勾掉省电模式 
参考:http://blog.csdn.net/ameryzhu/article/details/14105275


221. 百度地图相关 在Genymotion上启动项目时,程序抛出异常
222. 百度地图相关。E/baidumapsdk﹕ Authentication Error errorcode: -1 uid: -1 appid -1 msg: AndroidManifest.xml的application中没有meta-data标签
223. 百度地图相关 百度地图去掉缩放按钮
MapView放在ScrollView中,滚动时出现黑条 
http://bbs.lbsyun.baidu.com/forum.php?mod=viewthread&tid=1093 
应该GLSurfaceView放在ScrollView内部的问题.1.3.5用View直接绘制没有问题.能否在下版中提供一个底层基于View绘制的MapView


版主,我在想,当滚动用截取当前地图的bitmap.(调用getCurrentMap())然后盖在GLSurface上.但getCurrentMap()操作是异步的,用android自带的View.getDrawingCache()也未能成功获取.上述不成功后,由于需求限制可以对地图不操作,尝试了下能不能再MapView完成地图加载后getCurrentMap()把截图放在ImageView中盖在MapView上,但未能找到相应的监听方法.见贴:http://bbs.lbsyun.baidu.com/viewthread.php?tid=1104&extra=page%3D1.现在改用1.3.5在做.QQ:396920165能否交流下


scrollview内嵌mapview后的滑动问题


百度地图mapview放在scrollview中滑动黑屏


后面我试下了直接用截图功能。mapview设置隐藏,然后方法没被执行。是不是在mapview 不显示的情况下。截图功能不可用? 
开始移动前截图覆盖 
静态。不可拖动但是可要能点击


建议不要在scroll中使用mapview 因为本身map是用opengl绘制的,这个东西在scroll中存在性能问题,所以导致的体验效果不佳,请考虑改变实现方式。


百度map1.3.5 
http://developer.baidu.com/map/reference/index.php?title=Class:android%E6%A0%B8%E5%BF%83%E7%B1%BB/MapView


静态【不可放大缩小】的mapview。点击无效


http://www.cnblogs.com/trinea/archive/2012/11/14/2770433.html


224.Android自定义DataTimePicker(日期选择器) http://blog.csdn.net/wwj_748/article/details/38778631
225.Content-Type: application/x-www-form-urlencoded;
可以通过mitmproty分析


https://www.imququ.com/post/four-ways-to-post-data-in-http.html


四种常见的 POST 提交数据方式


application/x-www-form-urlencoded 
multipart/form-data 
text/xml 
application/json 
text/xml


226.androidstudio 升级后无法使用git svn等代码管理工具。
vcs –>Enable Version Control Integration 选择git/subversion 即可


227.androidstudio 升级后发现 编写代码自动提醒功能没了。
原因在于打开了File—>Power Saved Mode,关闭即可。


228.dshow 音频采集
229.kill -SIGKILL PID
强行中止(经常使用杀掉)一个进程标识号为324的进程: 
  #kill -9 324 
  (2)解除Linux系统的死锁 
   在Linux中有时会发生这样一种情况:一个程序崩溃,并且处于死锁的状态。此时一般不用重新启动计算机,只需要中止(或者说是关闭)这个有问题的程序 即可。当kill处于X-Window界面时,主要的程序(除了崩溃的程序之外)一般都已经正常启动了。此时打开一个终端,在那里中止有问题的程序。比 如,如果Mozilla浏览器程序出现了锁死的情况,可以使用kill命令来中止所有包含有Mozolla浏览器的程序。首先用ps命令查找该程序的 PID,然后使用kill命令停止这个程序: 
  #kill -SIGKILL XXX 
  其中,XXX是包含有Mozolla浏览器的程序的进程标识号。 
  (3)使用命令回收内存 
  我们知道内存对于系统是非常重要的,回收内存可以提高系统资源。kill命令可以及时地中止一些”越轨”的程序或很长时间没有相应的程序。例如,使用top命令发现一个无用(Zombie)的进程,此时可以使用下面命令: 
  #kill -9 XXX 
  其中,XXX是无用的进程标识号。 
  然后使用下面命令: 
  #free 
  此时会发现可用内存容量增加了。 
  (4)killall命令 
  Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号,例如: 
  # killall -HUP inetd


230.android导入eclipse项目后,出现如下问题
1.Error:The project is using an unsupported version of the Android Gradle plug-in (0.12.2). The recommended version is 1.2.3.


classpath ‘com.android.tools.build:gradle:1.2.3’


在build.gradle 根据提示把 
dependencies { 
classpath ‘com.android.tools.build:gradle:0.12.+’ 
}


修改为 
dependencies { 
classpath ‘com.android.tools.build:gradle:1.2.3’ 
}


2.上面修改后会出现如下错误:


Error:Unable to load class ‘org.codehaus.groovy.runtime.typehandling.ShortTypeHandling’.
Possible causes for this unexpected error include:You are using JDK version ‘java version “1.7.0_71”’. Some versions of JDK 1.7 (e.g. 1.7.0_10) may cause class loading errors in Gradle. 
Please update to a newer version (e.g. 1.7.0_67).


明明用的就是jdk1.7.0_71[比1.7.0_67还新] 却提示不对,问题起始不在jdk这而是 gradle-wrapper.properties


distributionUrl=http://services.gradle.org/distributions/gradle-1.12-all.zip 估计用的是jdk1.7.0.10


把 distributionUrl=http://services.gradle.org/distributions/gradle-1.12-all.zip 
修改为 distributionUrl=https://services.gradle.org/distributions/gradle-2.2.1-all.zip


ok 经过上面两步,从studio导入eclipse项目的正常使用。


231.android 注释模板
Settings–>Editor–>File and Code Templates–>Includes


232.shape中子节点的常用属性
android:startColor 起始颜色 
android:endColor 结束颜色 
android:angle 渐变角度,0从上到下,90表示从左到右,数值为45的整数倍默认为0; 
android:type 渐变的样式 liner线性渐变 radial环形渐变 sweep


例如:


<shape xmlns:android="http://schemas.android.com/apk/res/android"
    type="rectangle">
    <gradient
        android:angle="270"
        android:endColor="#9f36a0"
        android:startColor="#65216a" />
</shape>
2.<corners > 圆角 
android:radius 圆角的半径 值越大角越圆


android:topRightRadius 右上圆角半径


android:bottomLeftRadius 右下圆角角半径


android:topLeftRadius 左上圆角半径


android:bottomRightRadius 左下圆角半径 
如果你把4个角设成为90的话,那么改图片是一个圆! 
3.<solid > 填充 
android:color 填充的颜色


4.<stroke > 描边 
android:width 描边的宽度 
android:color 描边的颜色 
android:dashWidth 表示’-‘横线的宽度 
android:dashGap 表示’-‘横线之间的距离


参考 http://blog.csdn.net/cs_li1126/article/details/11781577


#
233. GestureOverlayView
234.Animation lInAnim = AnimationUtils.loadAnimation(mActivity, R.anim.push_left_in);

  • 2
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值