レイアウトとコントロールの使用をマスターする
秩序だったブロードキャスト メカニズムをマスターし、ブロードキャスト レシーバーの優先順位に従ってブロードキャストを受信する
ブロードキャスト インターセプト メカニズムをマスターする
インターフェイスは合理的なレイアウトで構築されており、インターフェイス効果は下の図に示されています。順番にブロードキャストする方法を使用し、下のアヒルの子の優先度をそれぞれ 1000、800、および 600 に設定します。
1. 大きなスピーカーをクリックすると、「順序レポート」がポップアップし、下のアヒルの子が左から「1」、「2」、「3」と報告します; 2. 2 番目のアヒルの子の優先度を設定し
ますを 1000 にすると、左の最初のアヒルの子の前に登録位置が調整されます.大きなスピーカーをクリックすると、「順番にカウント」がポップアップします.下の真ん中のアヒルの子が最初に「1」をカウントし、次に左側のアヒルの子が「2」をカウントし、最後に右側の小さなアヒルが「3」をカウントします;
3. 傍受メカニズムを設計します.大きなスピーカーをクリックすると、「整然としたカウント」がポップアップします.下の中央が最初に「1」をカウントし、次に残りのアヒルがカウントを停止します。
順序付けられたブロードキャスト メカニズムとブロードキャスト インターセプト メカニズムの使用を奨励し、同様の機能を持つ実験的なケースを独自に設計します。
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/count_ducks_bg"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginTop="60dp">
<ImageButton
android:id="@+id/horn"
android:layout_width="180dp"
android:layout_height="150dp"
android:layout_centerHorizontal="true"
android:background="@drawable/horn" />
<TextView
android:id="@+id/content_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/horn"
android:background="@drawable/content_left_bg"
android:gravity="center"
android:text="有序报数"
android:textColor="@color/white"
android:visibility="gone" />
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="150dp"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="40dp"
android:layout_marginRight="20dp"
android:orientation="vertical">
<TextView
style="@style/tittle_style"
android:id="@+id/duck_1"
/>
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@drawable/duck" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="20dp"
android:orientation="vertical">
<TextView
style="@style/tittle_style"
android:id="@+id/duck_2"
/>
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@drawable/duck" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="20dp"
android:orientation="vertical">
<TextView
style="@style/tittle_style"
android:id="@+id/duck_3"
/>
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@drawable/duck" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
style.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="tittle_style">
<item name="android:background">@drawable/tittle</item>
<item name="android:layout_width">20dp</item>
<item name="android:layout_height">20dp</item>
<item name="android:visibility">gone</item>
<item name="android:gravity">center</item>
<item name="android:layout_marginLeft">15dp</item>
<item name="android:textColor">@color/white</item>
</style>
</resources>
これは、ダック カウントを設定する TextView の形式です。
タイトル.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 设置渐变颜色-->
<gradient
android:endColor="#fe451d"
android:startColor="#fe957f"
android:type="linear"/>
<!-- 设置圆角-->
<corners android:radius="180dp"/>
</shape>
これは、スタイルによって呼び出される背景形式です。
MainActivity.java
package com.example.shiyan7;
import androidx.appcompat.app.AppCompatActivity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView duck1, duck2, duck3;
ImageButton horn;
TextView content_left;
MyBroadCastReceiver1 myBroadCastReceiver1;
MyBroadCastReceiver2 myBroadCastReceiver2;
MyBroadCastReceiver3 myBroadCastReceiver3;
private int num = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
register_Receiver();
}
private void init() {
duck1 = findViewById(R.id.duck_1);
duck2 = findViewById(R.id.duck_2);
duck3 = findViewById(R.id.duck_3);
horn = findViewById(R.id.horn);
content_left = findViewById(R.id.content_left);
horn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
content_left.setVisibility(View.VISIBLE);
horn.setClickable(false);
Intent intent = new Intent();
intent.setAction("Count_Duck");
sendOrderedBroadcast(intent,null);
}
});
}
private void register_Receiver() {
IntentFilter intentFilter1=new IntentFilter();
intentFilter1.addAction("Count_Duck");
intentFilter1.setPriority(1000);
// intentFilter1.setPriority(800);
myBroadCastReceiver1=new MyBroadCastReceiver1();
registerReceiver(myBroadCastReceiver1,intentFilter1);
IntentFilter intentFilter2=new IntentFilter();
intentFilter2.addAction("Count_Duck");
intentFilter2.setPriority(800);
// intentFilter2.setPriority(1000);
myBroadCastReceiver2=new MyBroadCastReceiver2();
registerReceiver(myBroadCastReceiver2,intentFilter2);
IntentFilter intentFilter3=new IntentFilter();
intentFilter3.addAction("Count_Duck");
intentFilter3.setPriority(600);
myBroadCastReceiver3=new MyBroadCastReceiver3();
registerReceiver(myBroadCastReceiver3,intentFilter3);
}
class MyBroadCastReceiver1 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
num=num+1;
duck1.setVisibility(View.VISIBLE);
duck1.setText(num+"");
Log.i("duck1","我收到了广播。");
stop();
}
}
class MyBroadCastReceiver2 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
num=num+1;
duck2.setVisibility(View.VISIBLE);
duck2.setText(num+"");
Log.i("duck2","我收到了广播。");
// abortBroadcast();
// Log.i("duck2","我拦截了广播。");
stop();
}
}
class MyBroadCastReceiver3 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
num=num+1;
duck3.setVisibility(View.VISIBLE);
duck3.setText(String.valueOf(num));
Log.i("duck3","我收到了广播。");
stop();
}
}
private void stop() {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myBroadCastReceiver1);
unregisterReceiver(myBroadCastReceiver2);
unregisterReceiver(myBroadCastReceiver3);
}
}