Android开发踩坑

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

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

  • #RGB:分别指定红、绿、蓝三原色的值(只支持0~f这16级颜色)来代表颜色。
  • #ARGB:分别指定红、绿、蓝三原色的值(只支持0f这16级颜色)及透明度(只支持0f这16级透明度)来代表颜色。
  • #RRGGBB:分别指定红、绿、蓝三原色的值(支持00~ff这256级颜色)来代表颜色。
  • #AARRGGBB:分别指定红、绿、蓝三原色的值(支持00fff这256级颜色)及透明度(支持00fff这256级透明度)来代表颜色。
    上面四种形式中,A、R、G、B都代表一个十六进制的数,其中A代表透明度,R代表红色的数值,G代表绿色数值,B代表蓝色数值。
    /**
     * 颜色透明度的转换
     *
     * @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地址

Android开发踩坑_第1张图片
设置IP.png

类名.this.方法

  • 当在一个类的内部类中,如果需要访问外部类的方法或者成员域的时候,如果使用 this.成员域(与 内部类.this.成员域 没有分别) 调用的显然是内部类的域 , 如果我们想要访问外部类的域的时候,就要必须使用 外部类.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(); 
}

比较两个字符串是否相等

  • 比较两个字符串是否相等应该用equals();函数而不能简单的用”==“,因为”==“判断的是这两个string类型的变量的内存地址是否相同而不是两字符串的内容。判断两个字符串内容是否相同应该用equals();

9.png

  • 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 的使用

  • 项目地址:https://github.com/ikew0ng/SwipeBackLayout#swipebacklayout
  • 使用过程中出现了先出现黑屏然后才出现上一个activity的现象,可在values/styles里面的主题里添加
true
  • 禁止向左向右或向下滑动可使用
getSwipeBackLayout().setEnableGesture(false);//设置默认不能滑动退出
  • 设置滑动退出方式
getSwipeBackLayout().setEdgeTrackingEnabled(SwipeBackLayout.EDGE_RIGHT);
//向右滑动退出
getSwipeBackLayout().setEdgeTrackingEnabled(SwipeBackLayout.EDGE_LEFT);
//向左滑动退出
getSwipeBackLayout().setEdgeTrackingEnabled(SwipeBackLayout.EDGE_BOTTOM);
//向下滑动退出
  • 在虚拟机中使用SwipeBackLayout时会出现向左滑动出现的是手机的主界面而不是上一个活动的界面,这个是为什么我不知道,有人知道么?

EventBus OnEventMainThread()里收不到消息

  • 需要在使用EventBus的地方注册与解注册,用一次就要注册与解注册一次
EventBus.getDefault().register(this);              //注册
EventBus.getDefault().unregister(this);          //解注册

变长变量

protected Void doInBackground(String... params) ;
  • ...表示变长变量:可以传一个或多个变量进来;
    如果只传一个参数的话就用params0获取到那一个参数,同理取得可能的更多的参数.

异步线程

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

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

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

  • AndroidManifest.xml:

ToolBar的使用

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

PhotoView的使用

  • android:layout_centerInParent="true" not working in app #357

你可能感兴趣的:(Android开发踩坑)