Bu belgede, Glass stiline nasıl uyulacağı ve kullanıcı deneyimini optimize edebilecek yaygın kullanıcı arayüzüyle ilgili en iyi uygulamaların nasıl uygulanacağı açıklanmaktadır. Aşağıdaki kullanıcı arayüzü öğelerini kapsar:
Tema
Kullanmanızı önerdiğimiz Glass temasının özellikleri şunlardır:
- Etkinlikleri işlem çubuğu olmadan tam ekran olarak gösterir.
- Tamamen siyah bir arka plan uygular.
- Renk kenarı efektinin rengini daha açık hale getirir.
- Beyaz metin rengi uygular.
Glass için önerilen tema ayarları şunlardır:
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar"> <item name="android:windowBackground">@android:color/black</item> <item name="android:colorEdgeEffect">@android:color/white</item> <item name="android:textColor">@android:color/white</item> </style>
XML düzenleri
Parçalarınızın genişletebileceği iki temel kart düzeni şunlardır:
Ana düzen
Bu düzen, bir kart için önerilen standart dolguyu ve altbilgiyi tanımlar. Kendi görüşlerinizi boş
FrameLayout içine yazın.
Örnek bir XML düzeni:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/layout" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:id="@+id/body_layout" android:layout_width="0dp" android:layout_height="0dp" android:layout_margin="@dimen/glass_card_margin" app:layout_constraintBottom_toTopOf="@id/footer" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> <!-- Put your widgets inside this FrameLayout. --> </FrameLayout> <!-- The footer view will grow to fit as much content as possible while the timestamp view keeps its width. If the footer text is too long, it will be ellipsized with a 40dp margin between it and the timestamp. --> <TextView android:id="@+id/footer" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="@dimen/glass_card_margin" android:layout_marginEnd="@dimen/glass_card_margin" android:layout_marginBottom="@dimen/glass_card_margin" android:ellipsize="end" android:singleLine="true" android:textAppearance="?android:attr/textAppearanceSmall" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@id/timestamp" app:layout_constraintStart_toStartOf="parent" /> <TextView android:id="@+id/timestamp" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/glass_card_margin" android:layout_marginBottom="@dimen/glass_card_margin" android:ellipsize="end" android:singleLine="true" android:textAlignment="viewEnd" android:textAppearance="?android:attr/textAppearanceSmall" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
Sol sütun düzeni
Bu düzen, görünümlerinizi yerleştirebileceğiniz iki
FrameLayout sınıfı şeklinde, solda genişliğin üçte biri kadar, sağda ise genişliğin üçte ikisi kadar bir sütun tanımlar. Örnek için aşağıdaki resme bakın.
Örnek bir XML düzeni:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:id="@+id/left_column" android:layout_width="0dp" android:layout_height="match_parent" android:background="#303030" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintWidth_percent=".333"> <!-- Put widgets for the left column inside this FrameLayout. --> </FrameLayout> <FrameLayout android:id="@+id/right_column" android:layout_width="0dp" android:layout_height="0dp" android:layout_marginTop="@dimen/glass_card_two_column_margin" android:layout_marginStart="@dimen/glass_card_two_column_margin" android:layout_marginBottom="@dimen/glass_card_two_column_margin" android:layout_marginEnd="@dimen/glass_card_margin" app:layout_constraintBottom_toTopOf="@id/footer" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/left_column" app:layout_constraintTop_toTopOf="parent"> <!-- Put widgets for the right column inside this FrameLayout. --> </FrameLayout> <!-- The footer view will grow to fit as much content as possible while the timestamp view keeps its width. If the footer text is too long, it will be ellipsized with a 40dp margin between it and the timestamp. --> <TextView android:id="@+id/footer" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="@dimen/glass_card_margin" android:layout_marginEnd="@dimen/glass_card_margin" android:layout_marginBottom="@dimen/glass_card_margin" android:ellipsize="end" android:singleLine="true" android:textAppearance="?android:attr/textAppearanceSmall" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@id/timestamp" app:layout_constraintStart_toEndOf="@id/left_column" /> <TextView android:id="@+id/timestamp" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/glass_card_margin" android:layout_marginBottom="@dimen/glass_card_margin" android:ellipsize="end" android:singleLine="true" android:textAlignment="viewEnd" android:textAppearance="?android:attr/textAppearanceSmall" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
Standart boyutlar
Glass'ın standart stiline uygun bir dosya oluşturmak için aşağıdakileri önceki düzenlerle veya kendi düzenlerinizle birlikte kullanın. Bu dosyayı Android projenizde res/values/dimens.xml olarak oluşturun.
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- The recommended margin for the top, left, and right edges of a card. --> <dimen name="glass_card_margin">40dp</dimen> <!-- The recommended margin between the bottom of the card and the footer. --> <dimen name="glass_card_footer_margin">50dp</dimen> <!-- The recommended margin for the left column of the two-column card. --> <dimen name="glass_card_two_column_margin">30dp</dimen> </resources>
Menüler
Menü oluşturmak için
RecyclerView kullanmanızı öneririz. Android Studio proje kaynaklarındaki standart Android menü dosyasına dayalı olmalıdır. Android, standart menü oluşturma işlemini geçersiz kılmanıza ve kendi uygulamanızla değiştirmenize olanak tanır. Bunun için, aşağıdaki adımları uygulayın:
-
RecyclerViewile düzeni oluşturun veActivityiçin görünüm olarak ayarlayın. -
RecyclerViewve bağdaştırıcısını, yeni oluşturulan menü öğeleri koleksiyonunu kullanacak şekilde ayarlayın. -
onCreateOptionsMenuyöntemini geçersiz kılın.- Menünüzü genişletin ve her menü öğesi için koleksiyona yeni öğenizi ekleyin.
- Adaptörde
notifyDataSetChangedyöntemini çağırın.
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { val menuResource = intent .getIntExtra(EXTRA_MENU_KEY, EXTRA_MENU_ITEM_DEFAULT_VALUE) if (menuResource != EXTRA_MENU_ITEM_DEFAULT_VALUE) { menuInflater.inflate(menuResource, menu) for (i in 0 until menu.size()) { val menuItem = menu.getItem(i) menuItems.add( GlassMenuItem( menuItem.itemId, menuItem.icon, menuItem.title.toString() ) ) adapter.notifyDataSetChanged() } } return super.onCreateOptionsMenu(menu) }
Java
@Override public boolean onCreateOptionsMenu(Menu menu) { final int menuResource = getIntent() .getIntExtra(EXTRA_MENU_KEY, EXTRA_MENU_ITEM_DEFAULT_VALUE); if (menuResource != EXTRA_MENU_ITEM_DEFAULT_VALUE) { final MenuInflater inflater = getMenuInflater(); inflater.inflate(menuResource, menu); for (int i = 0; i < menu.size(); i++) { final MenuItem menuItem = menu.getItem(i); menuItems.add( new GlassMenuItem(menuItem.getItemId(), menuItem.getIcon(), menuItem.getTitle().toString())); adapter.notifyDataSetChanged(); } } return super.onCreateOptionsMenu(menu); }
- Hangi seçeneğin belirlendiğini öğrenmek için
OnScrollListenerile birlikteLayoutManagerveSnapHelperkullanın. - Menü öğesi seçimi etkinliğini işlemek için
TAPhareketini dinleyin. - Seçili menü öğesiyle ilgili bilgiler içeren bir
Intentoluşturun. - Bu etkinlik için bir sonuç belirleyin ve etkinliği tamamlayın.
- Menü eklemek istediğiniz parçadan veya etkinlikten
startActivityForResultişlevini çağırın. Bu amaçlaTAPhareketini kullanın. - Seçili menü öğesini işlemek için arama parçası veya etkinliğindeki
onActivityResultişlevini geçersiz kılın.
Yönergeler
Menü düzeninizi ayarlamayla ilgili önerilerin listesini aşağıda bulabilirsiniz:
- Metin boyutu:
64sp - Arka plan rengi:
#96000000 64dpx64dpboyutunda Material Icons kullanın.-
windowIsTranslucenttema işaretinitrueolarak ayarlayın.
Aşağıdaki resimde, özelleştirilmiş bir menü düzeni örneği gösterilmektedir:
Uygulama ayrıntıları için Kart örneği uygulamasını inceleyin.
Kaydırılabilir sayfalar
Glass ekranı ve dokunmatik yüzeyi, kaydırılabilir kartları rahat bir şekilde görüntülemek için birlikte çalışır. Etkinliğinizde, standart Android
ViewPager API'si ile kaydırılabilir sayfalar oluşturabilirsiniz.
Kartlar veya ekranlar arasında gezinmek için Android
ViewPager özelliğini kullanma hakkında daha fazla bilgi edinmek için Ekranı kaydırma eğitim belgelerini ziyaret edin.