Android小司机系列:Android模板(个人收藏,不喜勿喷,欢迎提建议)
handler 通知主线程
thread部分:
Bundle bundle = new Bundle();
bundle.putLong("msg", sendBlockCount);
Message message = Message.obtain();
message.setData(bundle);
message.what = 0x01;
handler.sendMessage(message);
主线程部分:写在Myclass括号内即可
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0x01) {
Bundle bundle = msg.getData();
long counter = bundle.getLong("msg");
tv_Receive.setText(String.valueOf(counter));
}
}
};
Thread创建
private Thread newSendThread; //声明一个子线程
//函数里
newSendThread = new Thread(new Runnable() {
@Override
public void run() {
}
});
控制命令:
newSendThread.start();
注意:我已经探索过while(true)停止thread的方法,就设置停止flag变量和break最好,别的外部停止命令不起作用,不用查了,老老实实用停止flag变量和break。
回调接口(interface 怎么写)
//加载监听接口
public static interface ProgressListener {
public void onPorgressChanged(long sendBlockCount);
}
private ProgressListener mProgressListener;
public void setLoadingListener(ProgressListener listener) {
mProgressListener = listener;
}
使用例子:
blockNumber = (byte) ((++blockNumber) % 256); // 包序号自增
sendBlockCount++;
mProgressListener.onPorgressChanged(sendBlockCount);//这个是重点
调回去的地方的例子:
firmwireUpdater.setLoadingListener(new Xmodem.ProgressListener() {
@Override
public void onPorgressChanged(long sendBlockCount) {
if(sendBlockCount%5==0){
//子线程,用handler
Bundle bundle = new Bundle();
bundle.putLong("msg", sendBlockCount);
Message message = Message.obtain();
message.setData(bundle);
message.what = 0x01;
handler.sendMessage(message);
}
}
});
任务栏融合到背景中
写在Oncreate 中
if (Build.VERSION.SDK_INT >= 21) {
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
getWindow().setStatusBarColor(Color.TRANSPARENT);
}
同时还要在xml的主布局中加上:
android:fitsSystemWindows="true"
取消ActionBar
写在Oncreate 中
if (getSupportActionBar() != null){
getSupportActionBar().hide();
}
标准activity模板
public class MainActivity extends AppCompatActivity {
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context=this;
initWidget();
initOnClickListener();
}
void initWidget(){
if (getSupportActionBar() != null){
getSupportActionBar().hide();
}
}
void initOnClickListener(){
}
}
seekBar的使用
xml中:
<SeekBar
android:id="@+id/seekbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100"
android:progress="20"
android:thumb="@xml/myseekbar" />
myseekbar.xml中定义滑块的样式:
?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/activity_main_seekbar"/>
<item android:state_pressed="false" android:drawable="@drawable/activity_main_seekbar"/>
</selector>
activity中:
seekBar = (SeekBar)findViewById(R.id.seekbar);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
Log.i("seekBar",String.valueOf( progress));
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
android 中dp,sp,px互转
写个工具类吧:
public class DensityUtil {
private DensityUtil() {
throw new UnsupportedOperationException("cannot be instantiated");
}
/**
* dp转px
*/
public static int dp2px(Context context, float dpVal) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
dpVal, context.getResources().getDisplayMetrics());
}
/**
* sp转px
*/
public static int sp2px(Context context, float spVal) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
spVal, context.getResources().getDisplayMetrics());
}
/**
* px转dp
*/
public static float px2dp(Context context, float pxVal) {
final float scale = context.getResources().getDisplayMetrics().density;
return (pxVal / scale);
}
/**
* px转sp
*/
public static float px2sp(Context context, float pxVal) {
return (pxVal / context.getResources().getDisplayMetrics().scaledDensity);
}
}
启动activity
第一种:
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);
第二种:
startActivity(new Intent(context,MainActivity_tianjiacheliang.class));