实现一键退出App
MainActivity
package com.example.exitapp;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends BaseActivity{
private Button button01;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);//调用父类的onCreate从而将这个Activity加入到List中.
setContentView(R.layout.activity_main);
initView();
}
public void initView(){
button01 =findViewById(R.id.Button01);
button01.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent= new Intent(MainActivity.this,NormalActivity.class);
startActivity(intent);
}
});
}
}
NormalActivity
package com.example.exitapp;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class NormalActivity extends BaseActivity {
private Button button02;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_normal);
initView();
}
private void initView() {
button02=findViewById(R.id.Button02);
button02.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ActivityCollector.removeAll();
}
});
}
}
BaseActivity
package com.example.exitapp;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityCollector.addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}
}
ActivityCollector(工具类)
package com.example.exitapp;
import android.app.Activity;
import java.util.ArrayList;
import java.util.List;
public class ActivityCollector {
public static List<Activity> Activities=new ArrayList<>();
public static void addActivity(Activity activity){
if(activity!=null)
Activities.add(activity);
}
public static void removeActivity(Activity activity){
Activities.remove(activity);
}
public static void removeAll(){
for(Activity activity: Activities){
if(!activity.isFinishing()){
activity.finish();
}
Activities.clear();
}
}
}
组件练习
效果图
放在drawable-xxhdpi中的图片名字首字母不能大写
activity_test.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".TestActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="这是TextView的内容"
android:textAlignment="center"
android:textStyle="bold"
android:textSize="18sp"
android:textColor="#ff0000"
android:padding="5dp"
android:background="#999999"
android:gravity="center_horizontal" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入手机号码"
android:textSize="18dp"
android:inputType="phone"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#999999"
android:text="提交"
android:textSize="18sp"
/>
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:drawable/picture_frame"
android:src="@drawable/lovely"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="爱好:"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="足球"
android:checked="true"
/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="篮球"
/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="游泳"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="确定"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="性别"/>
<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/male"
android:text="男"
android:checked="true"/>
<RadioButton
android:id="@+id/female"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="女"/>
</RadioGroup>
</LinearLayout>
<ToggleButton
android:id="@+id/tb_switcher"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOn=""
android:textOff=""
android:checked="true"
android:background="@drawable/selector"/>
</LinearLayout>
select.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@drawable/on"/>
<item android:state_checked="false" android:drawable="@drawable/off"/>
</selector>
进度条练习
ProgressActivity
package com.example.uicomponenttest;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.TextView;
public class ProgressActivity extends AppCompatActivity {
private TextView textView;
private SeekBar seekBar;
private ProgressBar horizontalProgressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_progress);
initView();
}
private void initView() {
textView=findViewById(R.id.text_view);
seekBar=findViewById(R.id.seekbar);
horizontalProgressBar=findViewById(R.id.horizontal_progress_bar);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
horizontalProgressBar.setProgress(progress);
textView.setText("当前进度为:"+progress+"%");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
if(horizontalProgressBar.getProgress()>=horizontalProgressBar.getMax()){
horizontalProgressBar.setVisibility(View.INVISIBLE);
}else{
horizontalProgressBar.setVisibility(View.VISIBLE);
}
}
});
}
}
activity_progress.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ProgressActivity">
<ProgressBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/progress_bar"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="正在加载..."
android:gravity="center_horizontal" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<ProgressBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/horizontal_progress_bar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:progress="30"
/>
<SeekBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/seekbar"/>
<TextView
android:id="@+id/text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="当前进度是"
android:gravity="center"
/>
</LinearLayout>
</LinearLayout>
效果图