Android开发中的一些小知识点记录(41-60)

来源:互联网 发布:ubuntu ibus 系统设置 编辑:程序博客网 时间:2024/06/07 03:35

编写不易,如有转载,请声明出处: 梦回河口:http://blog.csdn.net/zxc514257857/article/details/73076519

Android开发中的一些小知识点记录(1-20) (21-40)

41,android:layout_gravity 与 android:gravity 的区别

  • android:layout_gravity 表示的是当前的View或者ViewGroup在 ViewGroup当中的位置(子控件在父控件中的位置)
  • android:gravity 表示的是当前的 View 或者 ViewGroup的内容所在的位置(控件的内容在控件中的位置)

42,margin和padding的区别

  • margin表示外边距
  • padding表示内边距

这里写图片描述

这里写图片描述
如图:未设边距时,三个边框线是重合的,设置边框线后,margin是外边距,向外扩;padding是内边距,向内扩

43,Android TV开发中获取控件焦点

  在每个控件的布局中设置:

android:focusable="true"

  这样就可以通过遥控器或按键获取到该控件焦点,然后在控件的状态选择器中设置:

<item android:drawable="@drawable/bg_yellow" android:state_focused="true"/><item android:drawable="@drawable/bg_normal"/>

  如果不想在状态选择器中设置,也可以在代码中设置:

public class MainActivity extends AppCompatActivity implements View.OnFocusChangeListener {    private static final String TAG = "MainActivity";    private Button mButton;    private EditText mEdittext;    private LinearLayout mLinearLayout;    private CheckBox mCheckBox;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        initData();    }    public void initView() {        mButton = (Button) findViewById(R.id.button);        mEdittext = (EditText) findViewById(R.id.edittext);        mLinearLayout = (LinearLayout) findViewById(R.id.linearlayout);        mCheckBox = (CheckBox) findViewById(R.id.checkbox);    }    public void initData(){        mButton.setOnFocusChangeListener(this);        mEdittext.setOnFocusChangeListener(this);        mLinearLayout.setOnFocusChangeListener(this);        mCheckBox.setOnFocusChangeListener(this);    }    @Override    public void onFocusChange(View view, boolean b) {        if(b & view == mEdittext){            view.setBackgroundResource(R.drawable.bg_yellow);        }else if(b & view == mButton){            view.setBackgroundResource(R.drawable.bg_red);        }else if(b & view == mLinearLayout){            view.setBackgroundResource(R.drawable.bg_green);        }else {            view.setBackgroundResource(R.drawable.bg_normal);        }    }}

44,自定义可更改颜色大小等属性的CheckBox

  • 设置CheckBox的button为你自定义的selector
<CheckBox    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:button="@drawable/checkbox_selector"/>
  • 准备checkbox_focus、checkbox_checked、checkbox_normal这三张图片,大小颜色等属性均由图片确定
<selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:state_focused="true" android:drawable="@drawable/checkbox_focus"/>    <item android:state_checked="true" android:drawable="@drawable/checkbox_checked"/>    <item android:drawable="@drawable/checkbox_normal"/></selector>

45,新建assets目录的位置

  在src—>main目录下面,和java、res目录平级,光忘记,记录一下!

46,红橙黄绿青蓝紫的 RGB十六进制表示法

  红    #FF0000
  橙    #FF8000
  黄    #FFFF00
  绿    #00FF00
  青    #00FFFF
  蓝    #0000FF
  紫    #8000FF

47,保证Apk的唯一性

包名唯一和应用程序签名的唯一

48,什么是时间戳

  时间戳:表示的是格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数
  时间戳转化为年月日时分秒形式代码:

import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import java.text.SimpleDateFormat;import java.util.Date;public class MainActivity extends AppCompatActivity {    private static final String TAG = "MainActivity";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // 时间戳 表示的是格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数        // 一般以long格式表示        long timestamp = 1514994617;        String time = formatData("yyyy:MM:dd HH:mm:ss", timestamp);        // time:2018:01:03 23:50:17        Log.i(TAG , "time:" + time);    }    /**     * 将时间戳格式化年月日时分秒形式     */    public static String formatData(String dataFormat, long timeStamp) {        if (timeStamp == 0) {            return "";        }        timeStamp = timeStamp * 1000;        String result = "";        SimpleDateFormat format = new SimpleDateFormat(dataFormat);        result = format.format(new Date(timeStamp));        return result;    }}

49,用流读取本地assets文件

InputStream is = getAssets().open("friends.txt");String json = readTextFile(is);Log.i(TAG, "json:" + json );Gson gson = new Gson();// [] 集合类型  {} 对象类型  集合类型要加List  对象类型直接.class就可以了List<Friends> friend =  gson.fromJson(json , new TypeToken<List<Friends>>(){}.getType());Log.i(TAG, "friend:" + friend );private String readTextFile(InputStream is) {    String readStr = "";    BufferedReader br;    try {        br = new BufferedReader(new InputStreamReader(is, "UTF-8"));        String tmp;        while ((tmp = br.readLine()) != null) {            readStr += tmp;        }        br.close();        is.close();    } catch (Exception e) {        e.printStackTrace();    }    return readStr;}

50,shape.xml 属性使用

<shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="rectangle">    <!--固体填充-->    <solid android:color="@color/colorAccent"/>    <!--圆角-->    <corners android:radius="20dp"/>    <!--描边 线宽2dp  虚线 长度9dp 实线 长度9dp-->    <stroke android:color="@color/colorPrimaryDark" android:width="2dp"        android:dashGap="9dp" android:dashWidth="9dp"/>    <!--渐变色 可以指定左中右渐变 可以调整角度 逆时针旋转角度 必须是45的倍数-->    <gradient android:startColor="#FFF" android:centerColor="@color/colorPrimary" android:endColor="#000" android:angle="45"/></shape>

51,通过两个点的经纬度计算距离

private const double EARTH_RADIUS = 6378.137;  private static double rad(double d){     return d * Math.PI / 180.0;  }  public static double GetDistance(double lat1, double lng1, double lat2, double lng2){     double radLat1 = rad(lat1);     double radLat2 = rad(lat2);     double a = radLat1 - radLat2;     double b = rad(lng1) - rad(lng2);     double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a/2),2) +      Math.Cos(radLat1)*Math.Cos(radLat2)*Math.Pow(Math.Sin(b/2),2)));     s = s * EARTH_RADIUS;     s = Math.Round(s * 10000) / 10000;     return s;  }  

52,跟进源码的方法

  有时候我们重写了系统方法,并且想查看一下系统方法的关键源码,可以通过在方法中添加堆叠追踪的方法实现。在方法中添加如下代码,你想跟进的系统源码就可以在控制台中打印出来。建议打印出来的最下面的信息就没有必要跟进了,从中间往上面跟进

new Throwable().printStackTrace();

这里写图片描述

53,通过Release版的签名证书打一个Release包

  选中Project点F4出现如下界面:
这里写图片描述

  填写Signing(比如命名为release),Build Types里面的debug和release的Signing Config都改为Signing中添加的那个名字(release)

  在控制台Terminal位置输入gradlew assembleRelease,回车等几分钟,就可以在build—->outputs中找到刚打的Release包

54,compileSdkVersion, minSdkVersion 和 targetSdkVersion三者之间的区别

  compileSdkVersion 用于告诉Gradle 用哪个 Android SDK 版本编译你的应用,建议设置最新的 SDK 版本进行编译

  minSdkVersion 用于设置应用可以正常运行的最低Android SDK 版本

  targetSdkVersion 用于设置你想使用新特性的Android SDK 版本,一般也是设置为最新的 SDK 版本,但设置之前需要进行详细的测试

  一般来说,三者之间的关系如下:minSdkVersion <= targetSdkVersion <= compileSdkVersion

55,android TV开发如何连接adb

  • 用 USB to USB 数据线连接,并需要通过软件或硬件的方式进行打开
    软件方式打开:在系统中找USB连接到PC的选项,勾选打开
    硬件方式打开:在主板上找到一个针脚的帽子,将帽子拔掉

  • 通过adb connect IP地址:端口号,这样的方式打开

56,android中将自己的应用程序设置为launcher

<activity android:name=".activity.SplashActivity"    android:theme="@style/AppSplashTheme">    <intent-filter>        <action android:name="android.intent.action.MAIN"/>        <category android:name="android.intent.category.LAUNCHER"/>        // 如果将应用程序设置为launcher,点击home键启动自己的应用        <category android:name="android.intent.category.HOME" />        // 如果接收隐式意图的话需设置category.DEFAULT,不然将导致 Intent 匹配失败        <category android:name="android.intent.category.DEFAULT" />    </intent-filter></activity>

Android开发中的一些小知识点记录(1-20) (21-40)


——-因本人才疏学浅,如博客或Demo中有错误的地方请大家随意指出,与大家一起讨论,共同进步,谢谢!——-

原创粉丝点击