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 应用于特定的视图。例如:

<Buttonandroid: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 shouldalways 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 nothave 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.mzph.cn/pingmian/37346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql的SQL语句实例

一.权限表 1.user表 User表是MySQL中最重要的一个权限表&#xff0c;记录允许连接到服务器的帐号信息&#xff0c;里面的权限是全局级的。 2.db表和host表 db表和host表是MySQL数据中非常重要的权限表。db表中存储了用户对某个数据库的操作权限&#xff0c;决定用户能从哪个…

mysql8.0其他数据库日志

概述 我们在讲解数据库事务时&#xff0c;讲过两种日志:重做日志、回滚日志。 对于线上数据库应用系统&#xff0c;突然遭遇数据库宕机怎么办?在这种情况下&#xff0c;定位宕机的原因就非常关键。可以查看数据库的错误日志。因为日志中记录了数据库运行中的诊断信息&#xff…

基于STM32的智能家用电力管理系统

目录 引言环境准备智能家用电力管理系统基础代码实现&#xff1a;实现智能家用电力管理系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景&#xff1a;电力管理与优化问题解决方案与优化收尾与总结 1. 引言 智能家用电力管理系统通…

【漏洞复现】I doc view——任意文件读取

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 I doc view 在线文档预览是一个用于查看、编辑、管理文档的工具…

JS(JavaScript)事件处理(事件绑定)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

心理辅导平台系统

摘 要 中文本论文基于Java Web技术设计与实现了一个心理辅导平台。通过对国内外心理辅导平台发展现状的调研&#xff0c;本文分析了心理辅导平台的背景与意义&#xff0c;并提出了论文研究内容与创新点。在相关技术介绍部分&#xff0c;对Java Web、SpringBoot、B/S架构、MVC模…

element 表格嵌套表单验证指定行

elementui表格嵌套动态表单&#xff0c;单独验证某一行输入项是否符合校验规则&#xff1b; input动态绑定校验 :prop"imgTable. scope.$index .bxName" <el-form :model"formTable" ref"formTable" inline size"small"><…

STM32_实现双线程控制LED交替闪烁(UCOS)

线程定义函数 void OSTaskCreate (OS_TCB *p_tcb,CPU_CHAR *p_name,OS_TASK_PTR p_task,void *p_arg,OS_PRIO prio,CPU_STK *p_stk_base,CPU_STK_SIZE stk_limit,CPU_STK_SIZE stk_size,OS_MSG_QTY q_size,OS_TICK time…

云顶之弈数据网站

摘要&#xff1a;随着云顶之弈游戏的广泛流行&#xff0c;玩家对于游戏数据的查询和最新资讯的获取需求呈现出显著增长的趋势。设计一款云顶之弈数据网站&#xff0c;为玩家提供便捷、高效的数据查询和资讯浏览服务&#xff0c;能满足玩家对于游戏数据的快速查询和实时资讯获取…

C# 如何单纯的优化循环

Parallel.For(0, 10000, i >{// 并行执行的代码块// 例如: Console.WriteLine(i);}); 这种循环比 单纯常用的for 和 foreach 要稍微快一点 但是呢如果循环里面写的是非常简单的业务逻辑 的话 for和foreach 要更胜一筹一点 Parallel 原理就好像我一个人忙不过来可以多找几个…

已解决java.security.acl.LastOwnerException:无法移除最后一个所有者的正确解决方法,亲测有效!!!

已解决java.security.acl.LastOwnerException&#xff1a;无法移除最后一个所有者的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 1. 检查当前所有者数量 2. 添加新的所有者 3. 维…

在区块链技术广泛应用的情况下,C 语言如何在区块链的底层开发中发挥更有效的作用,提高性能和安全性?

C语言在区块链底层开发中发挥着重要的作用&#xff0c;可以提高性能和安全性。具体可以从以下几个方面进行优化&#xff1a; 性能优化&#xff1a;C语言是一种高效的编程语言&#xff0c;可以直接访问内存和硬件资源。在区块链底层开发中&#xff0c;使用C语言可以更好地利用底…

ubuntu20.04 docker启动frp服务端

1. docker-compose.yml version: 3.8services:frps:image: snowdreamtech/frps:0.46.0container_name: frpsrestart: alwaysnetwork_mode: hostvolumes:- /root/application/docker/frp/frps.ini:/etc/frp/frps.ini分局实际情况修改挂载目录 2. frps.ini [common] # 监听端口…

【C语言】--数据类型和变量

&#x1f617;个人主页: 起名字真南 &#x1f619;个人专栏:【数据结构初阶】 【C语言】 目录 1 数据类型介绍1.1 字符型1.2 整形1.3 浮点型1.4 布尔型1.5 各种数据类型的长度1.5.1 sizeof 操作符1.5.2 数据类型长度1.5.3 sizeof 中表达式不计算 2 signed 和 unsigned3 数据类型…

1978Springboot在线维修预约服务应用系统idea开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot在线维修预约服务应用系统是一套完善的信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发 &#xff09;&#xff0c;系统具有完整的源代码和…

“Hello, World!“ 历史由来

布莱恩W.克尼汉&#xff08;Brian W. Kernighan&#xff09;—— Unix 和 C 语言背后的巨人 布莱恩W.克尼汉在 1942 年出生在加拿大多伦多&#xff0c;他在普林斯顿大学取得了电气工程的博士学位&#xff0c;2000 年之后取得普林斯顿大学计算机科学的教授教职。 1973 年&#…

解释如何在使用Bitmap时进行优化,以减少内存占用和提高性能

技术难点 在使用Bitmap时&#xff0c;优化内存占用和提高性能是一个重要的技术挑战。Bitmap对象本身可以占用大量内存&#xff0c;特别是在处理高分辨率图像时。以下是一些主要的技术难点&#xff1a; 内存管理&#xff1a;Bitmap对象占用的内存需要在不再需要时被及时释放&am…

Windows server 2016.2019 .NET Framework 3.5安装包、安装步骤

windows server2019 操作系统 安装 sqlserver2008时提示缺少 .NET Frameword 3.5&#xff0c; 在功能里选择 .NET Frameword 3.5安装报错&#xff0c; 下载安装包&#xff0c;下载地址 https://download.csdn.net/download/qq445829096/89450429这里指定备份源路径 安装包解…

OpenGL3.3_C++_Windows(22)

材质&#xff1a; 决定物体在渲染过程中最终视觉呈现的关键因素之一&#xff0c;它通过一系列光学&#xff08;投光物&#xff09;和物理参数&#xff08;反光度&#xff0c;反照率、金属度&#xff0c;折射率……&#xff09;准确模拟现实世界中的材料特性&#xff0c;从而增…

【MySQL】InnoDB的存储结构

InnoDB的存储结构&#xff1a;每个表都会生成一个表空间文件&#xff0c;这个文件里面最小结构就是行&#xff0c;存储的真正的数据&#xff0c;一个页来管理若干行&#xff0c;一个区来管理若干页&#xff0c;一个区组来管理若干区。段并不是真正的物理存储结构&#xff0c;它…