Abschluss der Android-Anwendungsentwicklung und Interview-Konzeptsprint (Konzept und Code, von hitwh)

Konzeptsprint für die Android-Anwendungsentwicklung (Konzept und Code)

ersten drei Kapitel

  1. Gesamtarchitektur von Android (vier) und was darin enthalten ist
  2. Android trennt () und ()?
  3. Der Verwendungszweck und Service ist die Verwendung von ContentProvider
  4. Die vier Kernkomponenten von Android
  5. Verwendung von Toast-Code

Kapitel 4 Aktivität

  1. Korrespondenz zwischen Aktivität und XML
  2. Die vier Aktivitätszustände
  3. Eintritts- und Austrittssequenz des Aktivitätsstapels
  4. Die 7 Rückruffunktionen der Aktivität (7 Lebenszyklen)
  5. Aktivitätslebenszyklusdiagramm**[sehr wichtig]**
  6. Die Projektkonfigurationsdatei AndroidManifest.xml enthält Inhalte
  7. Callback-Funktionsaufrufsequenz:[Sehr wichtig]
    • Normales Startprogramm
    • Klicken Sie nach dem Start des Programms auf Zurück
    • Drücken Sie nach dem normalen Start die Home-Taste
    • Drücken Sie die Home-Taste und klicken Sie dann auf Übernehmen, um einzutreten
    • Wechseln Sie nach dem normalen Start zum Querformatbildschirm (Strg+F11).
    • Entsperren nach Sperrbildschirm
    • Legen Sie nach einem eingehenden Anruf auf
  8. 5 Protokollebenen

Kapitel 5 Android-Benutzeroberfläche

  1. Probleme, die das Design mobiler Benutzeroberflächen lösen sollte (3)
  2. Vom Android-Schnittstellen-Framework übernommene Muster und Erläuterungen zu jedem Teil
  3. Die Eigenschaften und Vorteile des relativen Layouts von RelativeLayout
  4. Eigenschaften des linearen Layouts von LinearLayout
  5. Funktionen des FrameLayout-Rahmenlayouts
  6. Ereignisantwortmethode (d. h. Bindungsmethode der onClick-Funktion) (5 Typen)

Kapitel 6 Absicht

  1. Die Rolle der Absicht für Aktivität, Service und Übertragung
  2. Das Grundkonzept der Absicht (was zwischen was zu tun ist)
  3. Zwei Möglichkeiten, eine Aktivität mit Absicht zu starten
  4. Verwenden Sie die Absicht, Daten zwischen Aktivitäten zu übertragen (einseitig, bidirektional) (normale Daten übergeben, Objektdaten übergeben).

Kapitel 7 Android-Broadcast-Mechanismus Broadcast

  1. Grundkonzepte von Broadcast (was zwischen was zu tun ist)
  2. Was ist die Essenz von Broadcast (was wird mit welcher Methode gesendet)
  3. Zwei Arten von Sendungen
  4. Wofür wird BroadcastReceiver verwendet und wie wird es registriert (eine der vier Hauptkomponenten)?
  5. An welchen drei Stellen wird die Message-Broadcast-Identifikationszeichenfolge verwendet?

Kapitel 8 Service

  1. Merkmale des Dienstes (Lebenszyklus? Visuelle Schnittstelle? Wo läuft er?)
  2. Zwei Dienste und ihre jeweiligen Eigenschaften (Wo werden sie verwendet? Wie werden sie gestartet und beendet?)
  3. Lebensdauerzyklus (wird dies getestet)

Kapitel 9 1 SharedPreference

  1. Wo wird SP (Abkürzung) verwendet?
  2. SP kann den Datenaustausch zwischen verschiedenen Programmen realisieren (3 Zugriffsmethoden)
  3. SP blockiert den Betriebsprozess des Dateisystems vollständig

Kapitel 9 2 SQLite

  1. Zwei wichtige Punkte bei der Verwendung von ListView

Kapitel 10 ContentProvider

  1. Was bietet CP (Abkürzung)?
  2. Welche Vorteile bietet der Datenzugriff über CP?
  3. Womit kann ich auf die von CP bereitgestellten Daten zugreifen?
  4. Was ist ein CP-Datensatz? Was ist eine URL?
  5. Grundlegende Operationen von CP (wie erstellt man CP? Wie implementiert man Hinzufügung, Löschung, Änderung und Abfrage)

Kapitel 11 Multithreading- und Nachrichtenverarbeitungsmechanismus

  1. Der Unterschied zwischen Prozessen und Threads (wer schließt wen ein?)
  2. Der Zweck von Multithreading
  3. Handler-Nachrichtenverarbeitungsmechanismus, wie kommunizieren Unter-Threads und Haupt-Threads?

Kapitel 12 Android-Netzwerkprogrammierung

leicht

Kapitel 13 Fragment

  1. Was macht Fragment (Wo ist es eingebettet? Was ist es? Was kann es?)

Kapitel 14 Seitliches Schiebemenü und Tab-Navigation

Alle sind Codebeispiele

Kapitel 15 Android-Sensoranwendung

leicht

Code (in keiner bestimmten Reihenfolge, es wird gesagt, dass die Übertragung von Absichten zwischen Aktivitäten wichtiger ist als die Übertragung)

1. Broadcasts senden und Bundle verwenden

Absender
  • Senden Sie eine benutzerdefinierte Übertragung

    EditText et1=(EditText)findViewById(R.id.editText1); 
    EditText et2=(EditText)findViewById(R.id.editText2); 
    RadioButton rb=(RadioButton)findViewById(checkedId);
    
    String a=et1.getText().toString(); 
    String b=et2.getText().toString();
    String op=rb.getText().toString();
    
    Intent intent=new Intent("wust.zz.mybroadcast");
    
    Bundle bundle=new Bundle(); 
    bundle.putString("a",a);	
    bundle.putString("b",b); 
    bundle.putString("op",op);
    
    intent.putExtras(bundle); 
    sendBroadcast(intent); 
    
    Log.d("msg","广播发送成功");
    
  • Registrieren Sie den Broadcast-Filter statisch in der zugehörigen Datei AndroidManifest.xml (teilen Sie dem System mit, welche Art von Broadcast-Nachricht (Intent-Filter) dieser BroadcastReceiver empfangen möchte).

    <receiver
              android:name=".MyReceiver" 
              android:enabled="true" 
              android:exported="true" >
        <intent-filter>
            <action android:name="wust.zz.mybroadcast" />
        </intent-filter>
    </receiver>
    
    <!-- 补充:动态注册 -->
    IntentFilter filter = new IntentFilter();
    filter.addAction("wust.zz.mybroadcast");
    BroadcastReceiver receiver = new MyReceiver();
    registerReceiver( receiver , filter);
    
  • Die Anmeldung zur Systemübertragung erfolgt wie folgt:

    <receiver
    	android:name="wustzz.helloandroid.MyReceiver"
    	android:enabled="true"
    	android:exported="true" >
    	<intent-filter>
    		<action android:name="android.intent.action.ACTION_SHUTDOWN" />
       		<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
    	</intent-filter>
    </receiver>
    
  • Fügen Sie der APP Berechtigungen hinzu, um Anrufe zu tätigen

    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
    
  • Berechtigungsanwendungscode hinzufügen

    if (ActivityCompat.checkSelfPermission( MainActivity.this,
        Manifest.permission.PROCESS_OUTGOING_CALLS)!= PackageManager.PERMISSION_GRANTED ){
          
          
    		ActivityCompat.requestPermissions( MainActivity.this,new String[] {
          
           
    			Manifest.permission.PROCESS_OUTGOING_CALLS }, 123); 
            return;
    }
    
Empfangsende
  • Der Empfänger verarbeitet Broadcast-Nachrichten

    public class TestReceiver extends BroadcastReceiver {
          
          
    	@Override
    	public void onReceive(Context context, Intent intent) {
          
          
    		if( intent.getAction().equals( "wust.zz.mybroadcast" ) ) {
          
          
    			//处理该广播消息
    		}
    	}
    }
    
  • Empfängercode für Systemwahlfall:

    public class MyReceiver extends BroadcastReceiver {
          
          
    	public void onReceive(Context context, Intent intent) {
          
          
    		if (intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")) {
          
          
    			String phoneNum = intent.getStringExtra( Intent.EXTRA_PHONE_NUMBER ); 
    			Toast.makeText( context, "监听到拨打电话:" +phoneNum, 
    							Toast.LENGTH_SHORT ).show();
    			//其他操作,如启动另一个Activiy:
    			//Intent it = new Intent( context, ***Activity.class );
    			//context.startActivity(it);
           	}
        }
    }
    

2. Die Verwendung von Absichten (Informationsübertragung und Start zwischen Aktivitäten)

Aktivität starten
  • Zwei Fälle der Verwendung von Intent zum Starten einer Aktivität

    // 显示启动
    Intent intent = new Intent(A_Activity.this, B_Activity.class);
    startActivity(intent);
    
    // 隐式启动
    Intent intent = new Intent( Intent.ACTION_VIEW, Uri.parse("http://www.163.com") );
    startActivity(intent);
    
    // 隐式启动方式二
    Intent intent = new Intent(	);
    intent.setAction(Intent.ACTION_VIEW);   // Intent动作(系统提供)
    intent.setData(Uri.parse("http://www.163.com"));   // Intent数据
    startActivity(intent);
    
Aktivität vermittelt Informationen [hier konzentriert sich der Lehrer darauf]
  • Einzelartikel-Übertragungsdaten (hier werden normale Daten übertragen, das Bundle kann auch Objektdaten übertragen, Einzelheiten finden Sie im Haupt-MD)

    // A端代码
    Intent intent = new Intent(A_Activity.this, B_Activity.class);
    Bundle bundle=new Bundle();
    bundle.putString("name", "wustzz");	//给Bundle添加key-value值对 
    intent.putExtras(bundle);	//为intent设置bundle  startActivity(intent);	//启动B
    
    // B端代码
    Intent intent= getIntent();	//获取传递过来的intent
    Bundle bundle=intent.getExtras();	//取出intent中的bundle String 
    name=bundle.getString("name");  //取出key对应的value
    
  • Übertragen Sie Daten in beide Richtungen (das Kerngerüst für die Datenübertragung in umgekehrter Richtung ist angegeben, mit Ausnahme der Vorwärtsübertragung) (es wird empfohlen, sich das schematische Diagramm in der Haupt-MD-Datei anzusehen.)

    // A端代码
    Intent intent = new Intent(A_Activity.this, B_Activity.class);
    				//如有需要intent可以给B传递Bundle(略)
    startActivityForResult(intent, 100);  // 自设requestCode=100
    
    // B端代码
    Intent intent=getIntent();	//取得A传过来的Intent
    	//如有需要处理从A传过来的Bundle(略)
    Bundle bundle2=new Bundle();	//如需要则新建要传回的Bundle 
    bundle2.putString("key值", "value值");
    intent.putExtras(bundle2);
    setResult(RESULT_OK, intent);  //resultCode回传一个RESULT_OK(-1)标记
    finish();	//必须的,用于关闭B端,返回A端
    
    • Der Code für Client A, um Rückgabeinformationen zu erhalten:

      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
              
              
      	super.onActivityResult(requestCode, resultCode, data);
      	if(requestCode==100){
              
              	//表明是B的回传
      		if (resultCode==RESULT_OK) {
              
                //B回传的某个结果标记
                  //处理B回传的数据
                  Bundle b=data.getExtras();
                  String str=b.getString("key值");
          	}
              if (resultCode==其他标记值) {
              
                //B中传回的其他一个标记(如果有的话)
              }
          }
      }
      
  • Es wird dringend empfohlen, noch einmal einen Blick auf das Beispiel 1 für die bidirektionale Datenübertragung zu werfen. Alle Codes sind hier direkt angegeben.

    Um A_Activity zu implementieren, geben Sie zwei Zahlen ein, B_Activity summiert den Wert und gibt ihn zurück

    // A端Activity主要代码
    @Override
    protected void onCreate(Bundle savedInstanceState) {
          
          
    	Button btn=(Button)findViewById(R.id.button1); 
    	btn.setOnClickListener(new View.OnClickListener() {
          
          
            @Override
            public void onClick(View v) {
          
          
                EditText et1=(EditText)findViewById(R.id.editText1);
                EditText et2=(EditText)findViewById(R.id.editText2); 
                String a=et1.getText().toString();
                String b=et2.getText().toString();
                Intent intent=new Intent(A_Activity.this,B_Activity.class);
                Bundle bundle=new Bundle();
                bundle.putString("a", a);
                bundle.putString("b", b); intent.putExtras(bundle);
                startActivityForResult(intent, 100);	//关键语句
            }
    	});
    }
    
    
    // B_Activity主要代码
    @Override
    protected void onCreate(Bundle savedInstanceState) {
          
          
    	Intent intent=getIntent();
    	Bundle bundle=intent.getExtras();
    	String a=bundle.getString("a"); 
        String b=bundle.getString("b");
    	int sum=Integer.parseInt(a)+Integer.parseInt(b);
    	bundle.putInt("sum", sum);	//换成int数据 intent.putExtras(bundle);
    	setResult(RESULT_OK, intent);	//关键语句
        finish();
    }
    
    
    // A_Activity主要代码2 -- 关键事件onActivityResult
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          
          
    	if(requestCode==100) 
            if(resultCode==RESULT_OK){
          
          
    			Bundle bundle=data.getExtras();
    			int s=bundle.getInt("sum");
    			TextView tv=(TextView)findViewById(R.id.textView3); 
                tv.setText("结果="+s);
    		}
    }
    

3. XML-Datei (Attribute) einfacher Komponenten

Beachten Sie, dass Codes wie [Steuern von TextView- und RadioGroup-Änderungsereignissen für ausgewählte Elemente im Programm] hier nicht organisiert sind. Wenn Sie es sehen möchten, gehen Sie bitte zur Haupt-MD-Datei, um es anzuzeigen.

Textvorschau
<TextView
	android:id="@+id/textView1"				//组件id,@+id表示新建id资源
	android:layout_width="match_parent" 	//组件宽度
	android:layout_height="wrap_content"	//组件高度
	android:textColor="#ff0000" 			//字体颜色
	android:textSize="20sp"					//字体大小
	android:textStyle="normal|bold|italic"	//字形
	android:gravity="top|center|…"			//文字对齐方式
	android:text="用户名:" />				 //也使用引用形式:如@string/***
Bildansicht
<ImageView
	android:id="@+id/imageView" 			//组件id
	android:scaleType="缩放类型"			 //默认fitCenter:等比缩放填充控件大小,
										    //并居中展示; fitStart:等比缩放靠左显示
	android:src="@drawable/ic_launcher" />	//要显示的图片
Button, ImageButton und ToggleButton
<Button
	android:id="@+id/button" 
	android:text="提交" />

<ImageButton
	android:id="@+id/imageButton" 
	android:src="@drawable/login" />

<ToggleButton
	android:id="@+id/toggleButton"
    android:textOff="关闭" 				//设置关闭时显示的文字(默认为OFF) 
    android:textOn="打开" />				//Switch控件用法同ToggleButton
Text bearbeiten
<EditText
	android:id="@+id/editText" 					//组件id  
	android:maxLength="10" 						//限制输入或显示的文本长度
	android:singleLine="true" 					//单行文本(默认可多行)
	android:ems="10"							//设置TextView显示宽度为N个汉字宽度
	android:inputType="textPassword"			//设置为密码框
	android:hint="提示信息"						 //设置提示信息(text属性设置为空才显示) 
	android:text="输入值">
	<requestFocus />							//当前TextView获得焦点
</EditText>

<--! 补充:inputType的取值 -->
android:inputType="numberPassword"	数字密码框
android:inputType="textMultiLine"	多行文本
android:inputType="number"	数字键盘(只能输入数字)
android:inputType="phone"	拨号键盘
android:inputType="time"	时间键盘

<--! 补充:其他属性 -->
android:digits="abcd"	只能输入abcd这四种字符
RadioGroup
<RadioGroup
	android:id="@+id/radioGroup" 				//RadioGroup的id
	android:layout_width="wrap_content" 
	android:layout_height="wrap_content" 
	android:orientation="horizontal"  >			//horizontal:水平排列,vertical:垂直排列
	
	<RadioButton 
		android:id="@+id/radioButton1" 			//RadioButton的id
		android:layout_width="wrap_content" 
		android:layout_height="wrap_content"	
		android:checked="true"					//设置选中
		android:text="男" />						//设置按钮显示的文字
		
     <RadioButton 
     	android:id="@+id/radioButton2" 
     	android:layout_width="wrap_content" 
     	android:layout_height="wrap_content" 
     	android:text="" />
</RadioGroup>
CheckBox
<CheckBox
	android:id="@+id/checkBox"
	android:text="Android编程" />
Ergänzende Informationen zu Standortattributen (ich habe die PPT-Abschlussprüfung des Lehrers bestanden)
Gemeinsame Attribute von android:gravity und android:layout_gravity
Attributwert Was es bedeutet
oben unten oben und unten im Behälter
links rechts Befindet sich auf der linken und rechten Seite des Behälters
zentrieren, füllen Zentriert, füllt seinen Behälter
center_vertikal Mitte vertikal ausgerichtet
center_horizontal Mitte horizontal ausgerichtet
fill_vertikal Vertikale Polsterung
fill_horizontal horizontale Polsterung
clip_vertical In vertikaler Richtung zuschneiden. Der Zuschnitt basiert auf der vertikalen Ausrichtungseinstellung. Wenn die Oberseite ausgerichtet ist, wird die Unterseite abgeschnitten. Wenn die Unterseite ausgerichtet ist, wird die Oberseite abgeschnitten. Andernfalls werden die Ober- und Unterseite abgeschnitten.
clip_horizontal Horizontal zuschneiden, und der Zuschnitt basiert auf der horizontalen Ausrichtungseinstellung. Wenn die linke Seite ausgerichtet ist, wird die rechte Seite abgeschnitten; wenn die rechte Seite ausgerichtet ist, wird die linke Seite abgeschnitten; andernfalls werden die linke und rechte Seite abgeschnitten.
  • Das Gravitationsattribut ist für das Ansichtssteuerelement selbst bestimmt und wird verwendet, um festzulegen, wo der Inhalt des Steuerelements selbst im Steuerelement angezeigt werden soll.
    • Beispiel: In TextView bedeutet android:gravity="right", dass sich der Text in TextView auf der rechten Seite von TexView befindet.
  • Das Attribut „layout_gravity“ ist relativ zum übergeordneten Element, das das Element enthält, und legt die Position des Elements innerhalb des übergeordneten Elements fest.
    • Beispiel: In TextView bedeutet android:layout_gravity="center", dass sich TextView in der Mitte der gesamten Schnittstelle befindet.
  • Beachten:
    • Wenn für LinearLayout Android:orientation="vertical" festgelegt ist, wird die Einstellung „layout_gravity“ nur in horizontaler Richtung wirksam. Wenn Android:orientation="horizontal" festgelegt ist, wird das Attribut „layout_gravity“ nur in vertikaler Richtung wirksam.
Randattribut und Polsterattribut
//margin一般用来描述子控件与父控件的位置关系,即外边距。
android:layout_marginLeft=”1dp”
android:layout_marginRight=”2dp”
android:layout_marginTop=”5dp”
android:layout_marginBottom=”10dp”
android:layout_margin=”10dp” //上下左右与父控件相距10dp

//margin一般用来描述子控件与父控件的位置关系,即外边距。
android:padding_left=”1dp”
android:padding_Right=”2dp”
android:padding_Top=”5dp”
android:padding_Bottom=”10dp”
android:padding=”5dp” //控件内容上下左右均与控件边框相距5dp

4. Servicebezogene Codes

MyService.java
public class MyService extends Service {
    
    
    @Override
    public void onCreate() {
    
    
        // 第一次调用 startService 时调用,创建Service
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
    
    
        // 每次调用 startService 时调用
        // intent 可以接收到传来的数据
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
    
    
        // stopService stopSelf 调用后
        super.onDestroy();
    }

    @Override
    public IBinder onBind(Intent intent) {
    
    
        return null;
    }
}
AndroidManifest.xml
<service
    android:name=".MyService"
    android:enabled="true"
    android:exported="true" />
MyActivity.java
public class MyActivity extends AppCompatActivity {
    
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        Intent intent = new Intent(MyActivity.this, MyService.class);
        // 启动服务
        startService(intent);
        // 停止服务
        stopService(intent);
    }
}

5. Andere Codes

Verwendung von Toast
Toast toast=Toast.makeText( 参数1, 参数2, 参数3 );
//参数1:当前的上下文环境,getApplicationContext()或用:某个Activity.this
//参数2:要显示的字符串
//参数3:显示的时间长短,Toast.LENGTH_SHORT 或 Toast.LENGTH_LONG

toast.show();	//显示toast
Antwortereignis für die Schaltflächenregistrierung (5 Typen)
//方式1:匿名接口实现
Button bt=(Button)findViewById(R.id.button1); 
bt.setOnClickListener( new View.OnClickListener() {
    
    
	@Override
	public void onClick(View v) {
    
    
		// 代码
	}
});


//方式2:内部类实现接口
public class MainActivity extends Activity {
    
    			//外部类
	@Override
	protected void onCreate(Bundle savedInstanceState) {
    
     
		super.onCreate(savedInstanceState); 
		setContentView(R.layout.activity_main); 
		Button bt = (Button)findViewById(R.id.button1);
		bt.setOnClickListener( new mybuttonlistener() );
	}
	
	//内部类
	private class mybuttonlistener implements View.OnClickListener{
    
    	//内部类实现监听接口
		@Override
		public void onClick(View v) {
    
    
			// 事件代码
		}
	}
}


//方式3:绑定监听器 (也较常用)
//先定义一个监听器
View.OnClickListener buttonListener = new View.OnClickListener(){
    
    
	@Override
	public void onClick(View v) {
    
     switch( v.getId() ){
    
    
		case R.id.button1:case R.id.button2:}
};
//然后将监听器绑定给对象
button1.setOnClickListener(buttonListener);
button2.setOnClickListener(buttonListener);
//优势: 这种方式允许多个按钮注册 到同一个事件的监听器上,实现代码重用


//方式4:activity实现接口
public class MainActivity extends Activity implements View.OnClickListener{
    
    
	@Override
	protected void onCreate(Bundle savedInstanceState) {
    
    
		Button bt=(Button)findViewById(R.id.button1); 
		bt.setOnClickListener( this );
	}

	@Override
	public void onClick(View v) {
    
     
		switch( v.getId() ){
    
    
			case R.id.button1:case R.id.button2:}
	}
}


//方式5:在组件的属性中绑定事件(紧耦合不推荐)
<Button
	android:id="@+id/button1" 
	android:text="提交" 
	android:onClick="bt1Click"/>

public class MainActivity extends Activity {
    
     
	@Override
	protected void onCreate(Bundle savedInstanceState) {
    
    
	}
	
	public void bt1Click(View view){
    
    
		// 处理事件代码
	}
}
Aktivitätsregistrierungscode (AndroidManifest.xml)
<activity
	android:name=".MainActivity"
	android:exported="true">
	<intent-filter>
		<action android:name="android.intent.action.MAIN" />

		<category android:name="android.intent.category.LAUNCHER" />
	</intent-filter>
</activity>

<activity android:name=".AddRelationActivity"
	android:label="@string/app_name">
</activity>

<activity
	android:name=".Exam2ShowInfoActivity"
	android:exported="false" />
XML-Beispiele mehrerer gängiger Layouts (aus Experiment 1, nicht unbedingt korrekt, nur als Referenz)
LinearLayout
<LinearLayout
    android:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <CheckBox
        android:id="@+id/exam1_rp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/RememberPassword" />

    <CheckBox
        android:id="@+id/exam1_al"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:text="@string/AutoLogin" />
            
</LinearLayout>
Tabellenlayout
<TableLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1">

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/textView9"
            android:layout_width="46dp"
            android:layout_height="40dp"
            android:gravity="center"
            android:text="@string/Account"
            android:textSize="16sp" />

        <EditText
            android:id="@+id/editTextTextPersonName2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="16dp"
            android:layout_marginRight="16dp"
            android:ems="10"
            android:hint="请输入您的账号"
            android:inputType="textPersonName"
            android:textColor="#000000"
            android:textSize="14sp"
            app:layout_constraintEnd_toEndOf="parent" />

	</TableRow>

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/textView10"
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:gravity="center"
            android:text="@string/Password"
            android:textSize="16sp" />

        <EditText
            android:id="@+id/editTextTextPassword"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="16dp"
            android:layout_marginRight="16dp"
            android:ems="10"
            android:inputType="textPassword"
            app:layout_constraintEnd_toEndOf="parent" />
	</TableRow>

</TableLayout>
FrameLayout
<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp">

	<Button
        android:id="@+id/lab1_bt_forgetpw"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:layout_marginLeft="70dp"
        android:text="@string/ForgetPassword" />

    <Button
        android:id="@+id/lab1_bt_register"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:layout_marginRight="70dp"
        android:text="@string/Register" />
</FrameLayout>
RelativeLayout
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/textView11"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentEnd="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="38dp"
        android:text="Loading..."
        android:textAlignment="center" />
</RelativeLayout>

Weitere Prüfungsnotizen

  1. Mobile Computing-Technologie: Hauptsächlich Kapitel 0 bis 8, insbesondere der Start von Aktivitäten und der Werttransfer. Die Prüfung besteht aus drei Hauptfragen: Multiple-Choice-Fragen, Fragen mit kurzen Antworten und Programmierfragen. Die Programmierfragen werden nicht alle Programme schreiben. Und ich werde Sie nicht zulassen, dass Sie alle Schnittstellen schreiben, sodass während der Prüfung jeder aufgefordert wird, das Programm auszufüllen. Anstatt alle Programme und das Listener-Intent-Bundle zu schreiben, müssen Sie nur die darin enthaltene Logik schreiben. Es gibt viele Lektionen Kommt, also bringt einfach alle mit. Jeder stöbert, dies ist ein fortgeschrittener Kurs, die meisten von ihnen werden keine Prüfungen ablegen können, ihnen werden keine Programmierfragen gestellt, ihnen werden kurze Antwortfragen gestellt.
  2. Die zweite Hälfte von 9.1SharedPerformance wird selten getestet und SQLite ist etwas wichtiger
    Jeder wird während der Prüfung gebeten, die XML-Datei zu ergänzen
  3. Aktivitätsinteraktion und Startup, lebenszyklusbezogene Probleme
  4. Erlaubnis anfordern (Erlaubniserklärung)
  5. Die große Frage bezieht sich auf Aktivität und XML

Weitere Prüfungsnotizen

  1. Das Flussdiagramm des Aktivitätslebenszyklus sollte gezeichnet werden können. Der Effekt ähnelt der PPT-Kurzbeschreibung des Lebenszyklus.
    So legen Sie die Breite der Ansicht fest. Geben Sie das Attribut an
    Füllen Sie die Lücken für Programmierfragen aus. Fügen Sie entsprechend der Beschreibung der Frage verschiedene Attribute hinzu und versuchen Sie, die Bedeutung und kleine Details aufzuschreiben. Solange Ihre Absicht erkennbar ist , Sie erhalten Punkte (kopieren Sie die XML-Datei des Experiments öfter). ) Der Ablauf des angegebenen Beispiels muss verstanden werden
  2. Aktivität ist wichtiger als Rundfunk
  3. Multiple-Choice-Fragen. Fragen mit kurzen Antworten. Programmierfragen
  4. Vier Hauptkomponenten: Aktivität Dienst Rundfunkempfänger Inhaltsanbieter Was ist das? Funktion kurz beschreiben? Konzentrieren Sie sich auf die ersten drei und den letzten als fortgeschrittenen Inhalt
  5. TextView-ID/Breite/Höhe/Farbe/Schriftgröße/Schriftart/Position/Abstand/Rand
  6. Der Unterschied zwischen EditText und TextView: Passworthinweis... Was Sie über EditText wissen müssen, ist dasselbe wie das von TextView
  7. Sechs Schnittstellenlayouts
  8. Welche Bedeutung hat der Aktivitätslebenszyklus? Aktivitätsstapel: Wer zuerst reinkommt, mahlt zuerst. Nur ein Ereignis eines bestimmten Ereignisses darf oben auf dem Stapel liegen (aktiver Zustand). Wird es zerstört, wenn es aktiv ist? Rückruffunktion für Lebenszyklusereignisse
  9. Statische/dynamische Berechtigungsprüfung für Broadcast-Registrierung und Registrierungsberechtigung, und die Anwendung muss diese kennen
  10. Machen Sie nicht den komplizierten Test wie Spinner listView. Machen Sie den einfachen Test.
  11. Welche beiden Startmethoden gibt es für den Service? der Unterschied? Der Unterschied zwischen Lebenszyklus und Aktivitätslebenszyklus
  12. Toast Intent startet einen weiteren aktivitätsbezogenen Inhalt
  13. Was sind die Komponenteneigenschaften?
  14. Bidirektionale/unidirektionale Startabsichtsaktivität, expliziter Start, impliziter Start
  15. Es wird spekuliert, dass die Programmierfrage in Artikel A lautet: Absicht ruft Aktivität auf
  16. Für die Fragen und Antworten müssen Sie sich die bereitgestellte PPT-Fragenbank mit Kurzantworten ansehen

Guess you like

Origin blog.csdn.net/m0_56942491/article/details/131734779