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));
发布了17 篇原创文章 · 获赞 24 · 访问量 5477

猜你喜欢

转载自blog.csdn.net/whstudio123/article/details/104110909