Android Style 使用指南

简介:
Android Style 是一种能够统一定义应用程序中视图元素外观和行为的强大工具。通过使用 Style,可以轻松地应用相同的样式属性到多个视图上,提高代码的可维护性和重用性。本文将介绍 Android Style 的基本概念、使用方法以及一些最佳实践,帮助你更好地利用 Style 提升应用程序的外观和用户体验。

1. 定义 Style

在 Android 开发中,Style 是一组样式属性的集合,可以应用于视图或应用程序的不同部分。Style 使用 XML 格式进行定义,并在 res/values/styles.xml 文件中声明。下面是一个简单的 Style 定义示例:

<style name="MyButtonStyle" parent="Widget.AppCompat.Button">
    <item name="android:textColor">#FF0000</item>
    <item name="android:background">#00FF00</item>
    <item name="android:textSize">16sp</item>
</style>

在上述示例中,我们定义了一个名为 “MyButtonStyle” 的 Style,并继承自内置的 “Widget.AppCompat.Button” 样式。该 Style 定义了三个属性:textColor、background 和 textSize,分别用于设置按钮的文本颜色、背景和文本大小。

2. 应用 Style

要应用 Style,可以在布局文件或主题中使用 Style 引用。以下是两种常见的应用 Style 的方式:

2.1 在布局文件中应用 Style

通过在布局文件中的视图元素上使用 style 属性,可以将 Style 应用于特定的视图。例如:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Click Me"
    style="@style/MyButtonStyle" />

在上述示例中,我们为 Button 视图应用了之前定义的 “MyButtonStyle”。

2.2 在主题中应用 Style

另一种常见的方式是在应用的主题中应用 Style。通过在 res/values/styles.xml 文件中定义的主题中引用 Style,可以应用于整个应用程序或特定的活动。例如:

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="buttonStyle">@style/MyButtonStyle</item>
</style>

在上述示例中,我们定义了一个名为 “AppTheme” 的主题,并将 “buttonStyle” 属性设置为之前定义的 “MyButtonStyle”。

3. 继承和覆盖 Style

Android Style 支持继承和覆盖现有的 Style。通过使用 parent 属性指定父级 Style,可以继承父级 Style 的属性,并在子级 Style 中进行覆盖。以下是一个继承和覆盖 Style 的示例:

<style name="MyCustomButtonStyle" parent="MyButtonStyle">
    <item name="android:background">#0000FF</item>
</style>

在上述示例中,我们定义了一个名为 “MyCustomButtonStyle” 的 Style,继承自之前定义的 “MyButtonStyle”。同时,我们覆盖了 “background” 属性,将按钮的背景颜色设置为蓝色。

4. 最佳实践

以下是一些关于使用 Android Style 的最佳实践:

  • 命名规范:为了方便管理和理解,给 Style 和其它资源命名时应采用一致的命名规范,使用有意义的名称。

  • 模块化和重用:将常用的样式属性定义为独立的 Style,并在需要时进行引用,以提高代码的模块化性和重用性。

  • 主题化:通过在主题中应用 Style,可以实现应用范围内的样式一致性,并方便后续的主题切换和定制。

  • 使用样式属性:尽可能使用样式属性而不是硬编码的值。这样可以方便地在整个应用程序中进行全局修改和调整。

  • 继承和覆盖:利用样式的继承和覆盖功能来避免重复定义相同的样式属性。通过继承现有的样式并进行必要的覆盖,可以提高代码的可维护性和重用性。

  • 与尺寸单位一起使用:在定义样式属性时,尽量使用独立于屏幕密度的尺寸单位(如dp或sp)。这样可以确保样式在不同设备上具有一致的外观。

  • 主题和样式的分离:将主题和样式的定义分开,使其更易于管理和维护。主题应该包含与应用程序整体外观相关的样式属性,而样式则应该专注于特定视图或组件的样式定义。

  • 使用样式资源文件:将样式定义放在独立的样式资源文件中,而不是直接在布局文件中定义样式。这样可以提高代码的可读性和维护性,并允许在不修改布局文件的情况下更改样式。

andorid:Theme
API 级别 10 及更低级别的应用程序的默认主题。这是用于未明确设置自己主题的活动的主题。 您可以认为这是一个深色背景,顶部有浅色文本,但不应尝试对其外观做出其他假设。特别是,使用此主题的小部件内部的文本可能完全不同,小部件容器是浅色的,而其顶部的文本是深色的。

如果您正在针对 API 级别 11 及更高版本进行开发,则应改用 {@link Theme_Holo} 或 {@link Theme_DeviceDefault}。

<style name="Theme">
        <item name="isLightTheme">false</item>

        <item name="colorForeground">@color/bright_foreground_dark</item>
        <item name="colorForegroundInverse">@color/bright_foreground_dark_inverse</item>
        <item name="colorBackground">@color/background_dark</item> <item name="colorBackgroundFloating">?attr/colorBackground</item> <item name="colorBackgroundCacheHint">?attr/colorBackground</item> <item name="disabledAlpha">0.5</item> <item name="primaryContentAlpha">@dimen/primary_content_alpha_material_dark</item> <item name="secondaryContentAlpha">@dimen/secondary_content_alpha_material_dark</item> <item name="backgroundDimAmount">0.6</item> <item name="colorError">@color/red</item> <!-- Text styles --> <item name="textAppearance">@style/TextAppearance</item> <item name="textAppearanceInverse">@style/TextAppearance.Inverse</item> <item name="textColorPrimary">@color/primary_text_dark</item> <item name="textColorPrimaryInverse">@color/primary_text_light</item> <item name="textColorPrimaryActivated">@color/primary_text_dark</item> <item name="textColorPrimaryDisableOnly">@color/primary_text_dark_disable_only</item> <item name="textColorPrimaryInverseDisableOnly">@color/primary_text_light_disable_only</item> <item name="textColorPrimaryInverseNoDisable">@color/primary_text_light_nodisable</item> <item name="textColorPrimaryNoDisable">@color/primary_text_dark_nodisable</item> <item name="textColorSecondary">@color/secondary_text_dark</item> <item name="textColorSecondaryInverse">@color/secondary_text_light</item> <item name="textColorSecondaryActivated">@color/secondary_text_dark</item> <item name="textColorSecondaryNoDisable">@color/secondary_text_dark_nodisable</item> <item name="textColorSecondaryInverseNoDisable">@color/secondary_text_light_nodisable</item> <item name="textColorTertiary">@color/tertiary_text_dark</item> <item name="textColorTertiaryInverse">@color/tertiary_text_light</item> <item name="textColorHint">@color/hint_foreground_dark</item> <item name="textColorHintInverse">@color/hint_foreground_light</item> <item name="textColorHighlight">@color/highlighted_text_dark</item> <item name="textColorHighlightInverse">@color/highlighted_text_light</item> <item name="textColorLink">@color/link_text_dark</item> <item name="textColorLinkInverse">@color/link_text_light</item> <item name="textColorSearchUrl">@color/search_url_text</item> <item name="textColorAlertDialogListItem">@color/primary_text_light_disable_only</item> <item name="textAppearanceLarge">@style/TextAppearance.Large</item> <item name="textAppearanceMedium">@style/TextAppearance.Medium</item> <item name="textAppearanceSmall">@style/TextAppearance.Small</item> <item name="textAppearanceLargeInverse">@style/TextAppearance.Large.Inverse</item> <item name="textAppearanceMediumInverse">@style/TextAppearance.Medium.Inverse</item> <item name="textAppearanceSmallInverse">@style/TextAppearance.Small.Inverse</item> <item name="textAppearanceSearchResultTitle">@style/TextAppearance.SearchResult.Title</item> <item name="textAppearanceSearchResultSubtitle">@style/TextAppearance.SearchResult.Subtitle</item> <item name="textAppearanceEasyCorrectSuggestion">@style/TextAppearance.EasyCorrectSuggestion</item> <item name="textAppearanceMisspelledSuggestion">@style/TextAppearance.MisspelledSuggestion</item> <item name="textAppearanceAutoCorrectionSuggestion">@style/TextAppearance.AutoCorrectionSuggestion</item> <item name="textAppearanceGrammarErrorSuggestion">@style/TextAppearance.GrammarErrorSuggestion</item> <item name="textAppearanceButton">@style/TextAppearance.Widget.Button</item> <item name="editTextColor">@color/primary_text_light</item> <item name="editTextBackground">@drawable/edit_text</item> <item name="candidatesTextStyleSpans">@string/candidates_style</item> <item name="textCheckMark">@drawable/indicator_check_mark_dark</item> <item name="textCheckMarkInverse">@drawable/indicator_check_mark_light</item> <item name="textAppearanceLargePopupMenu">@style/TextAppearance.Widget.PopupMenu.Large</item> <item name="textAppearanceSmallPopupMenu">@style/TextAppearance.Widget.PopupMenu.Small</item> <!-- Button styles --> <item name="buttonStyle">@style/Widget.Button</item> <item name="buttonStyleSmall">@style/Widget.Button.Small</item> <item name="buttonStyleInset">@style/Widget.Button.Inset</item> <item name="buttonStyleToggle">@style/Widget.Button.Toggle</item> <item name="buttonCornerRadius">0dp</item> <item name="switchStyle">@style/Widget.CompoundButton.Switch</item> <item name="mediaRouteButtonStyle">@style/Widget.DeviceDefault.MediaRouteButton</item> <item name="selectableItemBackground">@drawable/item_background</item> <item name="selectableItemBackgroundBorderless">?attr/selectableItemBackground</item> <item name="borderlessButtonStyle">?attr/buttonStyle</item> <item name="homeAsUpIndicator">@drawable/ic_ab_back_holo_dark</item> <!-- List attributes --> <item name="listPreferredItemHeight">64dip</item> <item name="listPreferredItemHeightSmall">?attr/listPreferredItemHeight</item> <item name="listPreferredItemHeightLarge">?attr/listPreferredItemHeight</item> <item name="dropdownListPreferredItemHeight">?attr/listPreferredItemHeight</item> <item name="textAppearanceListItem">?attr/textAppearanceLarge</item> <item name="textAppearanceListItemSmall">?attr/textAppearanceLarge</item> <item name="textAppearanceListItemSecondary">?attr/textAppearanceSmall</item> <item name="listPreferredItemPaddingLeft">6dip</item> <item name="listPreferredItemPaddingRight">6dip</item> <item name="listPreferredItemPaddingStart">6dip</item> <item name="listPreferredItemPaddingEnd">6dip</item> <!-- @hide --> <item name="searchResultListItemHeight">58dip</item> <item name="listDivider">@drawable/divider_horizontal_dark</item> <item name="listSeparatorTextViewStyle">@style/Widget.TextView.ListSeparator</item> <item name="listChoiceIndicatorSingle">@drawable/btn_radio</item> <item name="listChoiceIndicatorMultiple">@drawable/btn_check</item> <item name="listChoiceBackgroundIndicator">@drawable/list_selector_background</item> <item name="activatedBackgroundIndicator">@drawable/activated_background</item> <item name="listDividerAlertDialog">@drawable/divider_horizontal_bright</item> <item name="expandableListPreferredItemPaddingLeft">40dip</item> <item name="expandableListPreferredChildPaddingLeft">?attr/expandableListPreferredItemPaddingLeft</item> <item name="expandableListPreferredItemIndicatorLeft">3dip</item> <item name="expandableListPreferredItemIndicatorRight">0dip</item> <item name="expandableListPreferredChildIndicatorLeft">?attr/expandableListPreferredItemIndicatorLeft</item> <item name="expandableListPreferredChildIndicatorRight">?attr/expandableListPreferredItemIndicatorRight</item> <item name="findOnPageNextDrawable">@drawable/ic_find_next_holo_dark</item> <item name="findOnPagePreviousDrawable">@drawable/ic_find_previous_holo_dark</item> <!-- Gallery attributes --> <item name="galleryItemBackground">@drawable/gallery_item_background</item> <!-- Window attributes --> <item name="windowBackground">@drawable/screen_background_selector_dark</item> <item name="windowBackgroundFallback">?attr/colorBackground</item> <item name="windowSplashScreenBackground">@color/transparent</item> <item name="windowSplashScreenAnimatedIcon">@null</item> <item name="windowSplashScreenBrandingImage">@null</item> <item name="windowSplashScreenIconBackgroundColor">@color/transparent</item> <item name="windowClipToOutline">false</item> <item name="windowFrame">@null</item> <item name="windowNoTitle">false</item> <item name="windowFullscreen">false</item> <item name="windowOverscan">false</item> <item name="windowIsFloating">false</item> <item name="windowContentOverlay">@null</item> <item name="windowShowWallpaper">false</item> <item name="windowTitleStyle">@style/WindowTitle</item> <item name="windowTitleSize">25dip</item> <item name="windowTitleBackgroundStyle">@style/WindowTitleBackground</item> <item name="windowAnimationStyle">@style/Animation.Activity</item> <item name="windowSoftInputMode">stateUnspecified|adjustUnspecified</item> <item name="windowActionBar">false</item> <item name="windowActionModeOverlay">false</item> <item name="windowCloseOnTouchOutside">false</item> <item name="windowTranslucentStatus">false</item> <item name="windowTranslucentNavigation">false</item> <item name="windowDrawsSystemBarBackgrounds">false</item> <item name="statusBarColor">@color/black</item> <item name="navigationBarColor">@color/navigation_bar_default</item> <item name="windowActionBarFullscreenDecorLayout">@layout/screen_action_bar</item> <item name="windowContentTransitions">false</item> <item name="windowActivityTransitions">false</item> <!-- Define these here; ContextThemeWrappers around themes that define them should
             always clear these values. -->
        <item name="windowFixedWidthMajor">0dp</item>
        <item name="windowFixedWidthMinor">0dp</item>
        <item name="windowFixedHeightMajor">0dp</item>
        <item name="windowFixedHeightMinor">0dp</item>

        <!-- Dialog attributes -->
        <item name="dialogTheme">@style/Theme.Dialog</item>
        <item name="dialogTitleIconsDecorLayout">@layout/dialog_title_icons</item>
        <item name="dialogCustomTitleDecorLayout">@layout/dialog_custom_title</item>
        <item name="dialogTitleDecorLayout">@layout/dialog_title</item>
        <item name="dialogPreferredPadding">@dimen/dialog_padding</item>
        <item name="dialogCornerRadius">0dp</item>

        <!-- AlertDialog attributes -->
        <item name="alertDialogTheme">@style/Theme.Dialog.Alert</item>
        <item name="alertDialogStyle">@style/AlertDialog</item>
        <item name="alertDialogCenterButtons">true</item>
        <item name="alertDialogIcon">@drawable/ic_dialog_alert</item>

        <!-- Presentation attributes (introduced after API level 10 so does not
             have a special old-style theme. -->
        <item name="presentationTheme">@style/Theme.DeviceDefault.Dialog.Presentation</item>

        <!-- Toast attributes -->
        <item name="toastFrameBackground">@drawable/toast_frame</item>

        <!-- Panel attributes -->
        <item name="panelBackground">@drawable/menu_background</item>
        <item name="panelFullBackground">@drawable/menu_background_fill_parent_width</item>
        <!-- These three attributes do not seems to be used by the framework. Declared public though -->
        <item name="panelColorBackground">#000</item>
        <item name="panelColorForeground">?attr/textColorPrimary</item>
        <item name="panelTextAppearance">?attr/textAppearance</item>

        <item name="panelMenuIsCompact">false</item>
        <item name="panelMenuListWidth">296dip</item>

        <!-- Scrollbar attributes -->
        <item name="scrollbarFadeDuration">250</item>
        <item name="scrollbarDefaultDelayBeforeFade">300</item>
        <item name="scrollbarSize">10dip</item>
        <item name="scrollbarThumbHorizontal">@drawable/scrollbar_handle_horizontal</item>
        <item name="scrollbarThumbVertical">@drawable/scrollbar_handle_vertical</item>
        <item name="scrollbarTrackHorizontal">@null</item>
        <item name="scrollbarTrackVertical">@null</item>

        <!-- Text selection handle attributes -->
        <item name="textSelectHandleLeft">@drawable/text_select_handle_left_material</item>
        <item name="textSelectHandleRight">@drawable/text_select_handle_right_material</item>
        <item name="textSelectHandle">@drawable/text_select_handle_middle_material</item>
        <item name="textSelectHandleWindowStyle">@style/Widget.TextSelectHandle</item>
        <item name="textEditPasteWindowLayout">@layout/text_edit_paste_window</item>
        <item name="textEditNoPasteWindowLayout">@layout/text_edit_no_paste_window</item>
        <item name="textEditSidePasteWindowLayout">@layout/text_edit_side_paste_window</item>
        <item name="textEditSideNoPasteWindowLayout">@layout/text_edit_side_no_paste_window</item>
        <item name="textCursorDrawable">@null</item>

        <!-- Widget styles -->
        <item name="absListViewStyle">@style/Widget.AbsListView</item>
        <item name="autoCompleteTextViewStyle">@style/Widget.AutoCompleteTextView</item>
        <item name="checkboxStyle">@style/Widget.CompoundButton.CheckBox</item>
        <item name="checkedTextViewStyle">@style/Widget.CheckedTextView</item>
        <item name="dropDownListViewStyle">@style/Widget.ListView.DropDown</item>
        <item name="editTextStyle">@style/Widget.EditText</item>
        <item name="expandableListViewStyle">@style/Widget.ExpandableListView</item>
        <item name="expandableListViewWhiteStyle">@style/Widget.ExpandableListView.White</item>
        <item name="fastScrollStyle">@style/Widget.FastScroll</item>
        <item name="galleryStyle">@style/Widget.Gallery</item>
        <item name="gestureOverlayViewStyle">@style/Widget.GestureOverlayView</item>
        <item name="gridViewStyle">@style/Widget.GridView</item>
        <item name="imageButtonStyle">@style/Widget.ImageButton</item>
        <item name="imageWellStyle">@style/Widget.ImageWell</item>
        <item name="listViewStyle">@style/Widget.ListView</item>
        <item name="listViewWhiteStyle">@style/Widget.ListView.White</item>
        <item name="popupWindowStyle">@style/Widget.PopupWindow</item>
        <item name="progressBarStyle">@style/Widget.ProgressBar</item>
        <item name="progressBarStyleHorizontal">@style/Widget.ProgressBar.Horizontal</item>
        <item name="progressBarStyleSmall">@style/Widget.ProgressBar.Small</item>
        <item name="progressBarStyleSmallTitle">@style/Widget.ProgressBar.Small.Title</item>
        <item name="progressBarStyleLarge">@style/Widget.ProgressBar.Large</item>
        <item name="progressBarStyleInverse">@style/Widget.ProgressBar.Inverse</item>
        <item name="progressBarStyleSmallInverse">@style/Widget.ProgressBar.Small.Inverse</item>
        <item name="progressBarStyleLargeInverse">@style/Widget.ProgressBar.Large.Inverse</item>
        <item name="seekBarStyle">@style/Widget.SeekBar</item>
        <item name="ratingBarStyle">@style/Widget.RatingBar</item>
        <item name="ratingBarStyleIndicator">@style/Widget.RatingBar.Indicator</item>
        <item name="ratingBarStyleSmall">@style/Widget.RatingBar.Small</item>
        <item name="radioButtonStyle">@style/Widget.CompoundButton.RadioButton</item>
        <item name="scrollViewStyle">@style/Widget.ScrollView</item>
        <item name="horizontalScrollViewStyle">@style/Widget.HorizontalScrollView</item>
        <item name="spinnerStyle">@style/Widget.Spinner</item>
        <item name="dropDownSpinnerStyle">@style/Widget.Spinner.DropDown</item>
        <item name="starStyle">@style/Widget.CompoundButton.Star</item>
        <item name="tabWidgetStyle">@style/Widget.TabWidget</item>
        <item name="textViewStyle">@style/Widget.TextView</item>
        <item name="errorMessageBackground">@drawable/popup_inline_error</item>
        <item name="errorMessageAboveBackground">@drawable/popup_inline_error_above</item>
        <item name="webTextViewStyle">@style/Widget.WebTextView</item>
        <item name="webViewStyle">@style/Widget.WebView</item>
        <item name="dropDownItemStyle">@style/Widget.DropDownItem</item>
        <item name="spinnerDropDownItemStyle">@style/Widget.DropDownItem.Spinner</item>
        <item name="spinnerItemStyle">@style/Widget.TextView.SpinnerItem</item>
        <item name="dropDownHintAppearance">@style/TextAppearance.Widget.DropDownHint</item>
        <item name="keyboardViewStyle">@style/Widget.KeyboardView</item>
        <item name="quickContactBadgeOverlay">@drawable/quickcontact_badge_overlay_dark</item>
        <item name="quickContactBadgeStyleWindowSmall">@style/Widget.QuickContactBadge.WindowSmall</item>
        <item name="quickContactBadgeStyleWindowMedium">@style/Widget.QuickContactBadge.WindowMedium</item>
        <item name="quickContactBadgeStyleWindowLarge">@style/Widget.QuickContactBadge.WindowLarge</item>
        <item name="quickContactBadgeStyleSmallWindowSmall">@style/Widget.QuickContactBadgeSmall.WindowSmall</item>
        <item name="quickContactBadgeStyleSmallWindowMedium">@style/Widget.QuickContactBadgeSmall.WindowMedium</item>
        <item name="quickContactBadgeStyleSmallWindowLarge">@style/Widget.QuickContactBadgeSmall.WindowLarge</item>
        <item name="listPopupWindowStyle">@style/Widget.ListPopupWindow</item>
        <item name="popupMenuStyle">@style/Widget.PopupMenu</item>
        <item name="popupTheme">@null</item>
        <item name="activityChooserViewStyle">@style/Widget.ActivityChooserView</item>
        <item name="fragmentBreadCrumbsStyle">@style/Widget.FragmentBreadCrumbs</item>
        <item name="contextPopupMenuStyle">?attr/popupMenuStyle</item>
        <item name="magnifierStyle">@style/Widget.Magnifier</item>

        <!-- Preference styles -->
        <item name="preferenceScreenStyle">@style/Preference.PreferenceScreen</item>
        <item name="preferenceActivityStyle">@style/PreferenceActivity</item>
        <item name="preferenceFragmentStyle">@style/PreferenceFragment</item>
        <item name="preferenceCategoryStyle">@style/Preference.Category</item>
        <item name="preferenceStyle">@style/Preference</item>
        <item name="preferenceInformationStyle">@style/Preference.Information</item>
        <item name="checkBoxPreferenceStyle">@style/Preference.CheckBoxPreference</item>
        <item name="switchPreferenceStyle">@style/Preference.SwitchPreference</item>
        <item name="seekBarPreferenceStyle">@style/Preference.SeekBarPreference</item>
        <item name="yesNoPreferenceStyle">@style/Preference.DialogPreference.YesNoPreference</item>
        <item name="dialogPreferenceStyle">@style/Preference.DialogPreference</item>
        <item name="seekBarDialogPreferenceStyle">@style/Preference.DialogPreference.SeekBarPreference</item>
        <item name="editTextPreferenceStyle">@style/Preference.DialogPreference.EditTextPreference</item>
        <item name="ringtonePreferenceStyle">@style/Preference.RingtonePreference</item>
        <item name="preferenceLayoutChild">@layout/preference_child</item>
        <item name="preferencePanelStyle">@style/PreferencePanel</item>
        <item name="preferenceHeaderPanelStyle">@style/PreferenceHeaderPanel</item>
        <item name="preferenceListStyle">@style/PreferenceHeaderList</item>
        <item name="preferenceFragmentListStyle">@style/PreferenceFragmentList</item>
        <item name="preferenceFragmentPaddingSide">@dimen/preference_fragment_padding_side</item>
        <item name="detailsElementBackground">@drawable/panel_bg_holo_dark</item>

        <!-- Search widget styles -->
        <item name="searchWidgetCorpusItemBackground">@color/search_widget_corpus_item_background</item>

        <!-- Action bar styles -->
        <item name="actionDropDownStyle">@style/Widget.Spinner.DropDown</item>
        <item name="actionButtonStyle">@style/Widget.ActionButton</item>
        <item name="actionOverflowButtonStyle">@style/Widget.ActionButton.Overflow</item>
        <item name="actionOverflowMenuStyle">?attr/popupMenuStyle</item>
        <item name="actionModeBackground">@drawable/cab_background_top_holo_dark</item>
        <item name="actionModeSplitBackground">@null</item>
        <item name="actionModeCloseDrawable">@drawable/ic_menu_close_clear_cancel</item>
        <item name="actionModeCutDrawable">@drawable/ic_menu_cut_holo_dark</item>
        <item name="actionModeCopyDrawable">@drawable/ic_menu_copy_holo_dark</item>
        <item name="actionModePasteDrawable">@drawable/ic_menu_paste_holo_dark</item>
        <item name="actionModeSelectAllDrawable">@drawable/ic_menu_selectall_holo_dark</item>
        <item name="actionModeShareDrawable">@drawable/ic_menu_share_holo_dark</item>
        <item name="actionModeFindDrawable">@drawable/ic_menu_find_holo_dark</item>
        <item name="actionModeWebSearchDrawable">@drawable/ic_menu_search</item>
        <item name="actionModeUndoDrawable">@drawable/ic_menu_undo_material</item>
        <item name="actionModeRedoDrawable">@drawable/ic_menu_redo_material</item>
        <item name="actionBarTabStyle">@style/Widget.ActionBar.TabView</item>
        <item name="actionBarTabBarStyle">@style/Widget.ActionBar.TabBar</item>
        <item name="actionBarTabTextStyle">@style/Widget.ActionBar.TabText</item>
        <item name="actionModeStyle">@style/Widget.ActionMode</item>
        <item name="actionModeCloseButtonStyle">@style/Widget.ActionButton.CloseMode</item>
        <item name="actionBarStyle">@style/Widget.ActionBar</item>
        <item name="actionBarSplitStyle">?attr/actionBarStyle</item>
        <item name="actionBarSize">@dimen/action_bar_default_height</item>
        <item name="actionModePopupWindowStyle">?attr/popupWindowStyle</item>
        <item name="actionMenuTextAppearance">@style/TextAppearance.Holo.Widget.ActionBar.Menu</item>
        <item name="actionMenuTextColor">?attr/textColorPrimary</item>
        <item name="actionBarWidgetTheme">@null</item>
        <item name="actionBarPopupTheme">@null</item>
        <item name="actionBarTheme">@null</item>
        <item name="actionBarDivider">?attr/dividerVertical</item>
        <item name="actionBarItemBackground">?attr/selectableItemBackground</item>

        <item name="toolbarStyle">@style/Widget.Toolbar</item>

        <item name="dividerVertical">@drawable/divider_vertical_dark</item>
        <item name="dividerHorizontal">@drawable/divider_vertical_dark</item>
        <item name="buttonBarStyle">@style/ButtonBar</item>
        <item name="buttonBarButtonStyle">?attr/buttonStyle</item>
        <item name="buttonBarPositiveButtonStyle">?attr/buttonBarButtonStyle</item>
        <item name="buttonBarNegativeButtonStyle">?attr/buttonBarButtonStyle</item>
        <item name="buttonBarNeutralButtonStyle">?attr/buttonBarButtonStyle</item>
        <item name="segmentedButtonStyle">@style/SegmentedButton</item>
        <item name="fingerprintAuthDrawable">@drawable/ic_fingerprint</item>

        <!-- Floating toolbar styles -->
        <item name="floatingToolbarCloseDrawable">@drawable/ic_ab_back_material_dark</item>
        <item name="floatingToolbarForegroundColor">@color/foreground_material_dark</item>
        <item name="floatingToolbarItemBackgroundBorderlessDrawable">@drawable/item_background_borderless_material_dark</item>
        <item name="floatingToolbarItemBackgroundDrawable">@drawable/item_background_material_dark</item>
        <item name="floatingToolbarOpenDrawable">@drawable/ic_menu_moreoverflow_material_dark</item>
        <item name="floatingToolbarPopupBackgroundDrawable">@drawable/floating_popup_background_dark</item>
        <item name="floatingToolbarDividerColor">@color/floating_popup_divider_dark</item>

        <!-- SearchView attributes -->
        <item name="searchViewStyle">@style/Widget.Holo.SearchView</item>
        <item name="searchDialogTheme">@style/Theme.SearchBar</item>

        <!-- PreferenceFrameLayout attributes -->
        <item name="preferenceFrameLayoutStyle">@style/Widget.PreferenceFrameLayout</item>

        <!-- NumberPicker style-->
        <item name="numberPickerStyle">@style/Widget.NumberPicker</item>

        <!-- CalendarView style-->
        <item name="calendarViewStyle">@style/Widget.CalendarView</item>

        <!-- TimePicker style -->
        <item name="timePickerStyle">@style/Widget.TimePicker</item>

        <!-- TimePicker dialog theme -->
        <item name="timePickerDialogTheme">?attr/alertDialogTheme</item>

        <!-- DatePicker style -->
        <item name="datePickerStyle">@style/Widget.DatePicker</item>

        <!-- DatePicker dialog theme -->
        <item name="datePickerDialogTheme">?attr/alertDialogTheme</item>

        <item name="fastScrollThumbDrawable">@drawable/scrollbar_handle_accelerated_anim2</item>
        <item name="fastScrollTrackDrawable">@null</item>
        <item name="fastScrollPreviewBackgroundRight">@drawable/menu_submenu_background</item>
        <item name="fastScrollPreviewBackgroundLeft">@drawable/menu_submenu_background</item>
        <item name="fastScrollOverlayPosition">floating</item>
        <item name="fastScrollTextColor">@color/primary_text_dark</item>


        <item name="colorPressedHighlight">@color/legacy_pressed_highlight</item>
        <item name="colorLongPressedHighlight">@color/legacy_long_pressed_highlight</item>
        <item name="colorFocusedHighlight">@color/legacy_selected_highlight</item>
        <item name="colorMultiSelectHighlight">@color/legacy_selected_highlight</item>
        <item name="colorActivatedHighlight">@color/legacy_selected_highlight</item>

        <item name="colorPrimaryDark">@color/legacy_primary_dark</item>
        <item name="colorPrimary">@color/legacy_primary</item>
        <item name="colorSecondary">?attr/colorPrimary</item>
        <item name="colorControlActivated">@color/legacy_control_activated</item>
        <item name="colorControlNormal">@color/legacy_control_normal</item>
        <item name="colorControlHighlight">@color/legacy_button_pressed</item>
        <item name="colorButtonNormal">@color/legacy_button_normal</item>
        <item name="colorEdgeEffect">?attr/colorPrimary</item>

        <!-- Accessibility focused drawable -->
        <item name="accessibilityFocusedDrawable">@drawable/view_accessibility_focused</item>

        <!-- Autofilled highlight drawable -->
        <item name="autofilledHighlight">@drawable/autofilled_highlight</item>

        <!-- Lighting and shadow properties -->
        <item name="lightY">@dimen/light_y</item>
        <item name="lightZ">@dimen/light_z</item>
        <item name="lightRadius">@dimen/light_radius</item>
        <item name="ambientShadowAlpha">@dimen/ambient_shadow_alpha</item>
        <item name="spotShadowAlpha">@dimen/spot_shadow_alpha</item>

        <!-- Tooltip popup properties -->
        <item name="tooltipFrameBackground">@drawable/tooltip_frame</item>
        <item name="tooltipForegroundColor">@color/bright_foreground_light</item>
        <item name="tooltipBackgroundColor">@color/tooltip_background_light</item>

        <!-- Autofill: max width/height of the dataset picker as a fraction of screen size -->
        <item name="autofillDatasetPickerMaxWidth">@dimen/autofill_dataset_picker_max_width</item>
        <item name="autofillDatasetPickerMaxHeight">@dimen/autofill_dataset_picker_max_height</item>

        <!-- Autofill: max height of custom save subtitle as a fraction of screen size -->
        <item name="autofillSaveCustomSubtitleMaxHeight">@dimen/autofill_save_custom_subtitle_max_height</item>
    </style>

总结:
Android Style 是一种强大的工具,可以用于统一定义应用程序中的视图元素外观和行为。通过合理地使用样式,我们可以提高应用程序的可维护性、可重用性和一致性。本文介绍了 Android Style 的基本概念、使用方法以及一些最佳实践。希望这些信息对你在开发 Android 应用程序时能够更好地应用和利用 Style 提升用户体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/754911.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GPU算力是什么,哪些行业需要用到GPU算力?

近两年&#xff0c;计算能力已成为推动各行各业发展的关键因素。而GPU&#xff08;图形处理器&#xff09;算力&#xff0c;作为现代计算技术的重要分支&#xff0c;正逐渐在多个领域展现出其强大的潜力和价值。尚云将简要介绍GPU算力的定义和基本原理&#xff0c;并探讨其在哪…

对于CDA一级考试该咋准备??!

一、了解考试内容和结构 CDA一级考试主要涉及的内容包括&#xff1a;数据分析概述与职业操守、数据结构、数据库基础与数据模型、数据可视化分析与报表制作、Power BI应用、业务数据分析与报告编写等。 CDA Level Ⅰ 认证考试大纲:https://edu.cda.cn/group/4/thread/174335 …

从架构设计的角度分析ios自带网络库和AFNetworking

总结&#xff08;先说明文章分析出的一些‘认知’&#xff09; 从本文中&#xff0c;我们可以总结出一些框架设计上的“认知”&#xff1a; 对于通用的常规配置信息方面的设计&#xff0c;我们可以通过定义一个“类似于NSURLSessionConfiguration、NSURLRequest”的类来完成设…

Python | Leetcode Python题解之第203题移除链表元素

题目&#xff1a; 题解&#xff1a; # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def removeElements(self, head: ListNode, val: int) -> Li…

ArkTS自定义组件

一、自定义组件基本结构 // 定义自定义组件 ButtonCom.ets Component export struct BtnCom{State msg: string "按钮";build() {Row(){Text(this.msg).onClick(() > {this.msg "测试"})}} } // 引入自定义组件 import {BtnCom} from "./Butto…

[Go Web] Kratos 使用的简单总结

文章目录 1.Kratos 简介2.传输协议3.日志4.错误处理5.配置管理6.wire 1.Kratos 简介 Kratos并不绑定于特定的基础设施&#xff0c;不限定于某种注册中心&#xff0c;或数据库ORM等&#xff0c;所以您可以十分轻松地将任意库集成进项目里&#xff0c;与Kratos共同运作。 API -&…

正版软件 | R-Drive Image:数据安全守护者,您的智能备份专家

在数字化时代&#xff0c;数据安全的重要性不言而喻。R-Drive Image 是一款功能强大的备份和恢复软件&#xff0c;为您提供了全面的解决方案&#xff0c;确保您的数据安全无忧。 精确备份&#xff0c;全面保护 R-Drive Image 能够创建硬盘驱动器的逐字节副本&#xff0c;无论是…

RabbitMQ 的经典问题

文章目录 前言一、防止消息丢失1.1 ConfirmCallback/ReturnCallback1.2 持久化1.3 消费者确认消息 二、防止重复消费三、处理消息堆积四、有序消费消息五、实现延时队列六、小结推荐阅读 前言 当设计和运维消息队列系统时&#xff0c;如 RabbitMQ&#xff0c;有几个关键问题需…

机器人控制系列教程之控制理论概述

经典控制理论 经典控制理论主要研究线性定常系统。所谓线性控制系统是指系统中各组成环节或元件的状态由线性微分方程描述的控制系统。如果描述该线性系统的微分方程系数是常数,则称为线性定常系统。描述自动控制系统输入量、输出量和内部量之间关系的数学表达式称为系统的数学…

夏令营1期-对话分角色要素提取挑战赛-第①次打卡

零基础入门大模型技术竞赛 简介&#xff1a; 本次学习是 Datawhale 2024 年 AI 夏令营第一期&#xff0c;学习活动基于讯飞开放平台“基于星火大模型的群聊对话分角色要素提取挑战赛”开展实践学习。 适合想 入门并实践大模型 API 开发、了解如何微调大模型的学习者参与 快来…

【RNN练习】LSTM-火灾温度预测

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前期准备工作 import torch.nn.functional as F import numpy as np import pandas as pd import torch from torch import nn1. 导入数据 data pd.read_cs…

[Leetcode刷题] - 栅栏涂漆DP类问题

题目描述 这一类题目通常会问给定一组房子n和一组染料k去涂漆&#xff0c;并且会加入限制条件比如&#xff1a;某种颜色只能使用1次&#xff0c;相相邻房子不能涂同一种颜色&#xff0c;或者最多不能超过连续3个房子涂想通过颜色等等&#xff0c;让我们列举所有可能性总和&…

如何评估CRM客户系统的功能是否满足助贷机构的需求?

评估 CRM 客户系统的功能是否满足助贷机构的需求&#xff0c;可以从以下几个方面入手&#xff1a; 1. 客户信息管理 - 检查系统能否全面、准确地记录客户的基本信息&#xff0c;如个人身份、财务状况、贷款需求等。 - 确认是否支持多维度的客户分类和标签功能&#xff0c;以…

STM32第七课:KQM6600空气质量传感器

文章目录 需求一、KQM6600模块及接线方法二、模块配置流程1.环境2.配置时钟和IO3.配置串口初始化&#xff0c;使能以及中断4.中断函数 三、数据处理四、关键代码总结 需求 能够在串口实时显示当前的VOC&#xff08;挥发性有机化合物&#xff09;&#xff0c;甲醛和Co2浓度。 …

css 流动边框

一、背景流动边框 实现原理&#xff1a; 用背景进行旋转&#xff0c;超出我们想显示的范围则hidden&#xff0c;就有以上的效果&#xff0c;可以用after或者before元素来实现也可以。 <!DOCTYPE html> <html lang"en"><head><meta charset&qu…

【开发环境】MacBook M2安装git并拉取gitlab项目,解决gitlab出现Access Token使用无效的方法

文章目录 安装Homebrew安装git打开IDEA配置git打开IDEA拉取项目 安装Homebrew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"在iTerm等命令行工具打开后&#xff0c;输入上面的命令 之后根据中文提示完成Homebrew的下载…

web项目打包成可以离线跑的exe软件

目录 引言打开PyCharm安装依赖创建 Web 应用运行应用程序打包成可执行文件结语注意事项 引言 在开发桌面应用程序时&#xff0c;我们经常需要将网页集成到应用程序中。Python 提供了多种方法来实现这一目标&#xff0c;其中 pywebview 是一个轻量级的库&#xff0c;它允许我们…

PyScript:在浏览器中释放Python的强大

PyScript&#xff1a;Python代码&#xff0c;直接在网页上运行。- 精选真开源&#xff0c;释放新价值。 概览 PyScript是一个创新的框架&#xff0c;它打破了传统编程环境的界限&#xff0c;允许开发者直接在浏览器中使用Python语言来创建丰富的网络应用。结合了HTML界面、Pyo…

把飞书云文档变成HTML邮件:问题挑战与解决历程

一、背景 云文档转HTML邮件 基于公司内部的飞书办公套件&#xff0c;早在去年6月&#xff0c;我们就建设了将飞书云文档转译成HTML邮件的能力&#xff0c;方便同学们在编写邮件文档和发送邮件时&#xff0c;都能有较好的体验和较高的效率。 当下问题 要被邮件客户端识别&am…

【蓝桥杯省赛真题46】python数字币统计 中小学青少年组蓝桥杯比赛 算法思维python编程省赛真题解析

目录 python数字币统计 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python数字币统计 第十四届蓝桥杯青少年组python比赛省赛真题 一、题目…