Статьи

Android динамическая и XML-макет

Операция Android содержит различные компоненты пользовательского интерфейса, например, кнопку, переключатель, список, текстовое поле и т. Д.

Компонент пользовательского интерфейса может быть организован / присоединен к активности двумя различными способами.

  1. Объявление элемента пользовательского интерфейса в layoutfile
    По сути, файл макета — это файл в формате XML, представленный в res / layout . В этом файле теги используются для определения любого компонента пользовательского интерфейса, а свойства используются для настройки компонентов. Это похоже на теги HTML. Этот стиль предпочтителен, потому что связанные коды пользовательского интерфейса и коды бизнес-логики разделены. Это сравнительно проще в управлении.
  2. Создание элемента представления во время выполнения
    UI Companent может быть создан программно. Методы установки класса компонента пользовательского интерфейса помогают настроить компонент. Этот стиль не рекомендуется, если он действительно не требуется. В этом стиле бизнес-логика смешивается с компонентным кодом пользовательского интерфейса. Это не выглядит опрятно, и иногда трудно управлять.

В этом руководстве мы создадим два разных класса Activity с одинаковыми компонентами пользовательского интерфейса, но с разными методами.

Создайте проект Android (как показано в этом руководстве ) и назовите Activity как XMLLayoutActivity, а файл макета — Activity_xmllayout.xml. Мы определим некоторые строковые константы, которые будут использоваться в файле макета и в Activity. Откройте файл string.xml, представленный в res / values и поместите следующее содержимое:

1
2
3
4
5
6
7
8
<resources>
    <string name='app_name'>AndroidLayout</string>
    <string name='menu_settings'>Settings</string>
    <string name='title_activity_xmllayout'>XMLLayoutActivity</string>
    <string name='c4r'>Code4Reference.com</string>
    <string name='OtherActivity'>Other Activity</string>
    <string name='dynamic_layout_activity'>Dynamic Layout Activity</string>
</resources>

Теперь мы напишем очень простой файл макета, который содержит компоненты Textview, EditText и Button UI, как показано ниже.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<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:orientation='vertical'>
 
    <TextView
        android:layout_width='match_parent'
        android:layout_height='wrap_content'
        android:padding='@dimen/padding_medium'
        android:text='@string/c4r'
        tools:context='.XMLLayoutActivity' />
    <EditText
        android:layout_width='match_parent'
        android:layout_height='wrap_content'
        android:padding='@dimen/padding_medium'
        android:hint='@string/c4r'
        tools:context='.XMLLayoutActivity'/>
     
    <Button
        android:id='@+id/btOtherActivity'
        android:layout_width='match_parent'
        android:layout_height='wrap_content'
        android:padding='@dimen/padding_medium'
        android:text='@string/OtherActivity'
        />
</LinearLayout>

Давайте определим первый класс активности с именем XMLLayoutActivity. В этом упражнении используется файл макета, определенный выше.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.code4reference.androidlayout;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
 
public class XMLLayoutActivity extends Activity {
 
 Button btOtherActivity;
 
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  // Attaching the layout file with the current Activity.
  setContentView(R.layout.activity_xmllayout);
  // Associate the Button object with the Button defined in the layout
  // file. Notice that R.id.btOtherActivity is associated with the
  //button in activity_xmllayout.xml layoutfile.
  btOtherActivity = (Button) findViewById(R.id.btOtherActivity);
  //Attaching the OnclickListener with the button.
  btOtherActivity.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View view) {
    //Creating an Intent which will invoke
    //the other Activity (DynamicLayoutActivity).
    Intent intent = new Intent(getApplicationContext(),
      DynamicLayoutActivity.class);
    //This method will start the other activity.
    startActivity(intent);
   }
  });
 }
}

Теперь добавьте еще один класс DynamicLayoutActivity в тот же пакет, который расширяет класс Activity. Этот класс действия будет динамически добавлять компонент пользовательского интерфейса в Activity. Поместите следующее содержание в определение класса. Встроенные комментарии помогут понять код.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package com.code4reference.androidlayout;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
import android.widget.Toast;
 
public class DynamicLayoutActivity extends Activity {
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  // This will create the LinearLayout
  LinearLayout ll = new LinearLayout(this);
  ll.setOrientation(LinearLayout.VERTICAL);
   
  // Configuring the width and height of the linear layout.
  LayoutParams llLP = new LayoutParams(
    //android:layout_width='match_parent' an in xml
    LinearLayout.LayoutParams.MATCH_PARENT,
    //android:layout_height='wrap_content'
    LinearLayout.LayoutParams.MATCH_PARENT);
  ll.setLayoutParams(llLP);
 
  TextView tv = new TextView(this);
  LayoutParams lp = new LayoutParams(
    LinearLayout.LayoutParams.MATCH_PARENT,
    LinearLayout.LayoutParams.WRAP_CONTENT);
 
  tv.setLayoutParams(lp);
  //android:text='@string/c4r'
  tv.setText(R.string.c4r);
  //android:padding='@dimen/padding_medium'
  tv.setPadding(8, 8, 8, 8);
  ll.addView(tv);
  EditText et = new EditText(this);
  et.setLayoutParams(lp);
  et.setHint(R.string.c4r);
  et.setPadding(8, 8, 8, 8);
   
  ll.addView(et);
  Button bt = new Button(this);
  bt.setText(R.string.OtherActivity);
  bt.setPadding(8, 8, 8, 8);
  ll.addView(bt);
  //Now finally attach the Linear layout to the current Activity.
  setContentView(ll);
 
  //Attach OnClickListener to the button.
  bt.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View view) {
    Toast.makeText(getApplicationContext(),
      'This is dynamic activity', Toast.LENGTH_LONG).show();
   }
  });
 }
}

Как видите, код выглядит не так аккуратно по сравнению с предыдущим. В OnClickListener класс Toast используется для запроса сообщения. Теперь нам нужно изменить файл AndroidManifest, потому что был добавлен другой класс активности.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    package='com.code4reference.androidlayout'
    android:versionCode='1'
    android:versionName='1.0' >
    <uses-sdk
        android:minSdkVersion='8'
        android:targetSdkVersion='15' />
    <application
        android:icon='@drawable/ic_launcher'
        android:label='@string/app_name'
        android:theme='@style/AppTheme' >
        <activity
            android:name='.XMLLayoutActivity'
            android:label='@string/title_activity_xmllayout' >
            <intent-filter>
                <action android:name='android.intent.action.MAIN' />
                <category android:name='android.intent.category.LAUNCHER' />
            </intent-filter>
        </activity>
        <activity android:name='.DynamicLayoutActivity'
            android:label='@string/dynamic_layout_activity'>
            <intent-filter >
                <category android:name='android.intent.category.LAUNCHER'/>
            </intent-filter>
        </activity>
    </application>
</manifest>

Как только кодирование завершено, запустите приложение, и вы увидите на экране следующую активность.

Если вы нажмете кнопку, появится следующее действие, имеющее почти аналогичный макет, но с другим названием. Если вы нажмете кнопку на другой активности, она покажет вам тост сообщение. Вы можете получить исходный код из github / Code4Reference . Вы можете прочитать больше о макете Android здесь .

Ссылка: Android-динамический и XML-макет от нашего партнера JCG Ракеша Кузата в блоге Code4Reference .