Вкратце, мы можем сказать, что Dashboard — это страница, содержащая большие и четкие символы основных функций и, возможно, область для соответствующей новой информации.
Просмотрите эти статьи:
1. UI Design Pattern — приборная панель (от Юхани Лехтимаки)
2. Шаблоны дизайна пользовательского интерфейса Android
Основная задача этой статьи — реализовать шаблон проектирования Dashboard, как показано ниже:
Шаг 1: Создать макет строки заголовка
Да, мы определяем макет строки заголовка (заголовка) только один раз, но это требуется на каждом экране. Мы будем просто показывать / скрывать домашнюю кнопку и другие кнопки, когда это необходимо. Как только вы закончили с определением макета строки заголовка, мы можем использовать тот же макет в других макетах, используя ViewStub.
Вот пример макета заголовка (заголовка) xml:
header.xml
|
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
|
<?xml version="1.0" encoding="utf-8"?> android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@color/title_background" > <LinearLayout android:id="@+id/panelIconLeft" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_margin="5dp" > <Button android:id="@+id/btnHome" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/ic_home" android:onClick="btnHomeClick" /> </LinearLayout> <TextView android:id="@+id/txtHeading" style="@style/heading_text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:layout_toLeftOf="@+id/panelIconRight" android:layout_toRightOf="@id/panelIconLeft" android:ellipsize="marquee" android:focusable="true" android:focusableInTouchMode="true" android:gravity="center" android:marqueeRepeatLimit="marquee_forever" android:singleLine="true" android:text="" android:textColor="@android:color/white" /> <LinearLayout android:id="@+id/panelIconRight" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_margin="5dp" > <Button android:id="@+id/btnFeedback" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/ic_feedback" android:onClick="btnFeedbackClick" /> </LinearLayout></RelativeLayout> |
В приведенном выше коде компоновки я ссылался на стиль из styles.xml и измерения из dimension.xml:
styles.xml
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
<?xml version="1.0" encoding="utf-8"?><resources><style name="heading_text"> <item name="android:textColor">#ff000000</item> <item name="android:textStyle">bold</item> <item name="android:textSize">16sp</item> <item name="android:padding">5dp</item> </style><style name="HomeButton"> <item name="android:layout_gravity">center_vertical</item> <item name="android:layout_width">fill_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:layout_weight">1</item> <item name="android:gravity">center_horizontal</item> <item name="android:textSize">@dimen/text_size_medium</item> <item name="android:textStyle">normal</item> <item name="android:textColor">@color/foreground1</item> <item name="android:background">@null</item> </style></resources> |
dimen.xml
|
1
2
3
4
5
6
7
|
<?xml version="1.0" encoding="utf-8"?><resources> <dimen name="title_height">45dip</dimen> <dimen name="text_size_small">14sp</dimen> <dimen name="text_size_medium">18sp</dimen> <dimen name="text_size_large">22sp</dimen></resources> |
Шаг 2: Создать супер (абстрактный) класс
На самом деле, в этом абстрактном суперклассе мы определим:
1) обработчики событий для обеих кнопок: Домой и Обратная связь
2) другие методы
Кнопки «Домой» и «Обратная связь», которые будут видны почти во всех действиях и требуют выполнения одних и тех же действий (т. Е. Приведения пользователя к домашнему действию), поэтому вместо того, чтобы писать один и тот же код в каждом действии, мы пишем обработчик событий только один раз в абстрактный класс, который будет суперклассом для каждого вида деятельности.
Возможно, вы заметили в макете header.xml: android: onClick = ”btnHomeClick” (кнопка Home) и android: onClick = ”btnFeedbackClick” (кнопка Feedback), поэтому мы определим этот метод только один раз в суперклассе (аннотация).
Пожалуйста, обратитесь к примеру ViewStub, если вы не знаете об этом.
Теперь вот код для абстрактного (супер) класса, я называю его DashboardActivity.java
|
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
|
package com.technotalkative.viewstubdemo;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.ViewStub;import android.widget.Button;import android.widget.TextView;public abstract class DashBoardActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } public void setHeader(String title, boolean btnHomeVisible, boolean btnFeedbackVisible) { ViewStub stub = (ViewStub) findViewById(R.id.vsHeader); View inflated = stub.inflate(); TextView txtTitle = (TextView) inflated.findViewById(R.id.txtHeading); txtTitle.setText(title); Button btnHome = (Button) inflated.findViewById(R.id.btnHome); if(!btnHomeVisible) btnHome.setVisibility(View.INVISIBLE); Button btnFeedback = (Button) inflated.findViewById(R.id.btnFeedback); if(!btnFeedbackVisible) btnFeedback.setVisibility(View.INVISIBLE); } /** * Home button click handler * @param v */ public void btnHomeClick(View v) { Intent intent = new Intent(getApplicationContext(), HomeActivity.class); intent.setFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); } /** * Feedback button click handler * @param v */ public void btnFeedbackClick(View v) { Intent intent = new Intent(getApplicationContext(), FeedbackActivity.class); startActivity(intent); }} |
Шаг 3. Определение макета панели мониторинга
|
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
<?xml version="1.0" encoding="utf-8"?> android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ViewStub android:id="@+id/vsHeader" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inflatedId="@+id/header" android:layout="@layout/header" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" android:padding="6dip" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="horizontal" > <Button android:id="@+id/main_btn_eclair" style="@style/HomeButton" android:drawableTop="@drawable/android_eclair_logo" android:onClick="onButtonClicker" android:text="@string/EclairActivityTitle" /> <Button android:id="@+id/main_btn_froyo" style="@style/HomeButton" android:drawableTop="@drawable/android__logo_froyo" android:onClick="onButtonClicker" android:text="@string/FroyoActivityTitle" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="horizontal" > <Button android:id="@+id/main_btn_gingerbread" style="@style/HomeButton" android:drawableTop="@drawable/android_gingerbread_logo" android:onClick="onButtonClicker" android:text="@string/GingerbreadActivityTitle" /> <Button android:id="@+id/main_btn_honeycomb" style="@style/HomeButton" android:drawableTop="@drawable/android_honeycomb_logo" android:onClick="onButtonClicker" android:text="@string/HoneycombActivityTitle" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="horizontal" > <Button android:id="@+id/main_btn_ics" style="@style/HomeButton" android:drawableTop="@drawable/android_ics_logo" android:onClick="onButtonClicker" android:text="@string/ICSActivityTitle" /> <Button android:id="@+id/main_btn_jellybean" style="@style/HomeButton" android:drawableTop="@drawable/android_jellybean_logo" android:onClick="onButtonClicker" android:text="@string/JellyBeanActivityTitle" /> </LinearLayout> </LinearLayout></LinearLayout> |
Шаг 4: Определите действия для обработки событий нажатия кнопок на макете этой панели.
В этом упражнении вы найдете использование метода setHeader () для установки заголовка для домашнего действия, да, в этом методе я передал «false» для кнопки «Домой», потому что это уже домашнее действие, но я передал «true» для Кнопка обратной связи, потому что обратная связь нужна, чтобы быть видимой. Другой процесс аналогичен определению обработчиков нажатий кнопок.
|
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
|
package com.technotalkative.viewstubdemo;import android.content.Intent;import android.os.Bundle;import android.view.View;public class HomeActivity extends DashBoardActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setHeader(getString(R.string.HomeActivityTitle), false, true); } /** * Button click handler on Main activity * @param v */ public void onButtonClicker(View v) { Intent intent; switch (v.getId()) { case R.id.main_btn_eclair: intent = new Intent(this, Activity_Eclair.class); startActivity(intent); break; case R.id.main_btn_froyo: intent = new Intent(this, Activity_Froyo.class); startActivity(intent); break; case R.id.main_btn_gingerbread: intent = new Intent(this, Activity_Gingerbread.class); startActivity(intent); break; case R.id.main_btn_honeycomb: intent = new Intent(this, Activity_Honeycomb.class); startActivity(intent); break; case R.id.main_btn_ics: intent = new Intent(this, Activity_ICS.class); startActivity(intent); break; case R.id.main_btn_jellybean: intent = new Intent(this, Activity_JellyBean.class); startActivity(intent); break; default: break; } }} |
Шаг 5: Определите другие действия и их макеты пользовательского интерфейса
Теперь пришло время определить действия, которые мы хотим отображать, основываясь на конкретном нажатии кнопки на панели инструментов. Так что определите все виды деятельности и их макеты. Не забывайте вызывать метод setHeader () везде, где это необходимо.
Вот один из примеров такой деятельности — Activity_Eclair.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
|
package com.technotalkative.viewstubdemo;import android.os.Bundle;public class Activity_Eclair extends DashBoardActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_eclair); setHeader(getString(R.string.EclairActivityTitle), true, true); }} |
activity_eclair.xml
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?xml version="1.0" encoding="utf-8"?> android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ViewStub android:id="@+id/vsHeader" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inflatedId="@+id/header" android:layout="@layout/header" /> <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="@string/EclairActivityTitle" /></LinearLayout> |
Шаг 6: Объявите действия внутри файла AnroidManifest.xml
Теперь вы СДЕЛАНЫ
Выход:
|
| Главный экран _ Пейзаж |
|
| внутренний экран |
|
|
|
Вы можете скачать исходный код здесь: Android — Реализация шаблонов Dashboard
Обратная связь / отзыв всегда приветствуются
Справка: Android — реализация шаблона проектирования панели мониторинга от нашего партнера JCG Пареша Н. Майани из блога TechnoTalkative .

.png)


