Android开发踩坑

2016-03-09  本文已影响109人  houlucky

Android颜色值所支持的4个格式

Android中颜色值是通过红(Red)、绿(Green)、蓝 (Blue)三原色,以及一个透明度(Alpha)值来表示的,颜色值总是以井号(#)开头,接下来就是Alpha-Red-Green-Blue的形 式。其中Alpha值可以省略,如果省略了Alpha的值,那么该颜色默认是完全不透明的。
Android的颜色值支持常见的四种形式如下所示:

    /**
     * 颜色透明度的转换
     *
     * @param color color值 eg.#AARRGGBB
     * @param alpha alpha值
     * @return 最终的状态栏颜色 A single color value in the form 0xAARRGGBB.
     */
    private static int calculateStatusColor(@ColorInt int color, int alpha) {
        float a = 1 - alpha / 255f;//不透明度
        int red = (color >> 16) & 0xff;
        int green = (color >> 8) & 0xff;
        int blue = color & 0xff;
        red = (int) (red * a + 0.5);//乘以不透明度,得到新的R的值
        green = (int) (green * a + 0.5);
        blue = (int) (blue * a + 0.5);
        return (0xff << 24) | (red << 16) | (green << 8) | blue;
    }

附:颜色透明度的转换

当在命令行执行javac遇到GBK不可编码的错误时,在javac后面加上-encoding UTF-8就ok了

上传开源库到jcenter踩坑

注册账户时别注册错了,个人用户的话点这个网址注册,拉到底部

在执行如下操作的时候很慢

./gradlew install
./gradlew bintrayUpload

可在此Gradle Distributions手动下载,然后手动添加到C:\Users\asus\.gradle\wrapper\dists此目录下,

每个gradle包的上一层目录都有一个AndroidStudio生成的随机字符串。我们将下载好的包放在随机生成的字符串的下一层就行了。
开源库更新版本./gradlew bintrayUpload

Socket通信过程中遇到的一些困惑

当pc端做server 手机端做client端的时候
进入cmd命令行输入 ipconfig 即可查询到电脑的ip 而任意一个地址都可作为 服务器端的主机IP地址

设置IP.png

类名.this.方法

 public class Test{    
    public void A(){          
        System.out.println("外部类A);         
    }  

    Thread thread = new Thread(){       
        public void A() {
          System.out.println("inner A");
        }      

    thread.start();

    public void run(){           
         System.out.println("内部类run");        
         Test.this.tn();//调用外部类的A方法。          
         this.tn();//调用内部类的A方法           
     }    
}

从当前的activity跳转到某个活动的一个fragment中

①在对应activity中使用意图跳转到MainActivity中,这里通过意图塞入了一个标识符(更严谨的方式是通过请求码和结果码实现)

// 登录成功跳转到我的京东首页
Intent intent = new Intent(LoginActivity.this,MainActivity.class);
intent.putExtra("contactsList", 1);//跳转到联系人列表那个fragment
startActivity(intent);

②在MainActivity的onResume()方法中得到这个标识符,并且切换到相应的Tab即可

@Override
protected void onResume() {
    int id = getIntent().getIntExtra("contactsList", 0); 
    if(id == 1 ) { 
       mTabHost.setCurrentTab(3); //3代表”联系人列表那个fragment 的位置
    } 
    super.onResume(); 
}

比较两个字符串是否相等

9.png

gravitylayout_gravity区别

android:gravity = "";//是相对于这个控件本身
android:layout_gravity = "";//是相对于这个控件的父元素

Android MD 控件TabLayout的一些属性

app:tabMode="fixed"
app:tabIndicatorHeight="0dp"
app:tabSelectedTextColor="@color/color_bottom_text_selected"
app:tabTextColor="@color/color_bottom_text_normal"
app:tabBackground="@null"
app:tabGravity="fill"
mViewPager.setCurrentItem(index);   //设置当前选中的fragment

开源库 SwipeBackLayout 的使用

<item name="android:windowIsTranslucent">true</item>
getSwipeBackLayout().setEnableGesture(false);//设置默认不能滑动退出
getSwipeBackLayout().setEdgeTrackingEnabled(SwipeBackLayout.EDGE_RIGHT);
//向右滑动退出
getSwipeBackLayout().setEdgeTrackingEnabled(SwipeBackLayout.EDGE_LEFT);
//向左滑动退出
getSwipeBackLayout().setEdgeTrackingEnabled(SwipeBackLayout.EDGE_BOTTOM);
//向下滑动退出

EventBus OnEventMainThread()里收不到消息

EventBus.getDefault().register(this);              //注册
EventBus.getDefault().unregister(this);          //解注册

变长变量

protected Void doInBackground(String... params) ;

异步线程

因为android主线程最好不要处理太多的逻辑,而界面的刷新要在主线程里执行,所以用AsyncTask处理复杂的逻辑关系,并在处理结束之后刷新界面.其中最主要的需要重写的方法有三个

    onPreExecute();
    doInBackground();
    onPostExecute();

This Activity already has an action bar supplied by the window decor

<activity android:name=".activity.YourActivity" 
            android:theme="@style/AppTheme.NoActionBar"><!-- ADD THIS LINE -->

ToolBar的使用

getSupportActionBar().setDisplayHomeAsUpEnabled(true);//设置返回箭头
//
setDisplayHomeAsUpEnabled(true);//设置返回箭头
setNavigationOnClickListener()//设置返回按钮监听;
setNavigationViewIcon();       //设置返回按钮左边的按钮,同时,这个方法需要在调用过 
setSupportActionBar(ToolBar ); 之后调用才有效;
setLogo();//设置图标;
setDisplayUseLogoEnabled();//设置图标是否显示。
setTitle();//设置标题
setSubTitle();//设置副标题;
setOnMenuItemListener(); //设置最右边的选项按钮监听。

PhotoView的使用

上一篇 下一篇

猜你喜欢

热点阅读