我正在使用操作栏支持库 (appcompat v7),我的应用程序设置为最小 api 7,目标为 21。
我有两个样式文件,一个基本文件,一个针对设备 api 11+。
在运行 KitKat 的设备上运行应用程序时,似乎android:actionBarStyle忽略了这一点,将操作栏保留为默认样式(@style/Widget.AppCompat.ActionBar.Solid),而不是应用给定的背景。
但是如果我删除我的 v11 样式/将它们注释掉,KitKat 会听 actionBarStyle基本 style.xml 文件中设置属性并设置我的自定义背景而不会出现任何问题。
所以我的问题是,v11 样式哪里出了问题?
据我了解,根据 android 文档,您应该使用 android:前缀,但这似乎对我不起作用。
剥离下来,这是我的/res/values/styles.xml文件:
<style name="My.Theme" parent="@style/Theme.AppCompat">
<item name="actionBarStyle">@style/ActionBar.Solid</item>
</style>
<style name="ActionBar.Solid" parent="@style/Widget.AppCompat.ActionBar.Solid">
<item name="background">@drawable/ab_solid_</item>
</style>
Run Code Online (Sandbox Code Playgroud)
这是我的/res/values-v11/styles.xml文件:
<style name="My.Theme" parent="@style/Theme.AppCompat">
<item name="android:actionBarStyle">@style/ActionBar.Solid</item>
</style>
<style name="ActionBar.Solid" parent="@style/Widget.AppCompat.ActionBar.Solid">
<item name="android:background">@drawable/ab_solid_</item>
</style>
Run Code Online (Sandbox Code Playgroud)
如您所见,两者之间的唯一区别是android:前缀的使用。
我需要使用程序兼容性V7中引入新的工具栏功能:21阅读SO跟帖这里和android的博客文章在这里。我从博客文章中精确地复制了工具栏片段到我的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical">
<android.support.v7.widget.Toolbar <- Line 8
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
问题是我得到:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.blabla.PrefActivity}: android.view.InflateException: Binary XML file line #8: Error inflating class <unknown>
Run Code Online (Sandbox Code Playgroud)
有趣的是,如果我删除这一行: android:minHeight="?attr/actionBarSize"
有用。所以问题不是因为项目依赖关系等等。看来我只能访问 ?attr 元素,如 actionBarSize 或 colorPrimary
不用说我已经添加了 AppCompat 依赖项。并且该活动是从 PreferenceActivity 继承的。这是我的毕业证书:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:support-v4:21.0.3'
compile 'com.android.support:appcompat-v7:21.0.3'
}
Run Code Online (Sandbox Code Playgroud)
在这里和这里人们随机报告解决问题。但是我的随机在过去两天没有工作。
编辑:
这是我的活动:
public class PrefActivity extends PreferenceActivity {
private Toolbar …Run Code Online (Sandbox Code Playgroud) 在 Demo 下显示The hierarchy of the type Demo is inconsistent,在 RecyclerView 下显示The type android.support.v4.view.ScrollingView cannot be resolved。它是从所需的 .class 文件间接引用的。我该如何解决?
public class Demo extends RecyclerView {
public Demo(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
Run Code Online (Sandbox Code Playgroud) 我有包含三个片段的 minidemo。一个显示两个TextView和一个editview直接,下一个使用自定义适配器将相同的布局视为列表中的行,第三个显示一个带有标准适配器的普通列表(simple_list_item_1)
活动使用标准主题(Theme.AppCompat.Light.DarkActionBar),我没有修改。
我本来希望所有三个块的样式都相似。相反,带有自定义适配器的第二个块似乎根本没有根据浅色主题进行样式设置。(见文末截图)
理想情况下,我希望自定义列表的行的样式类似于第一个块。或者,我想应用第三个块的样式。但是,所有字体和背景似乎都有些偏色,我不确定如何找出当前用作主题一部分的内容。因此,通过手动分配文本颜色、大小、背景等来修复中间块的样式不是一种选择。
整个演示请参考MiniDemo
这是 item_row.xml 布局文件(顶层相对布局标签好像被编辑器剥离了。完整布局请到gitlab)
<TextView android:text="large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:textAppearanceLarge"
android:id="@+id/text1_field" />
<TextView android:text="large inverse"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/text2_field"
android:textAppearance="?android:attr/textAppearanceLargeInverse"
android:layout_centerHorizontal="true" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="5"
android:id="@+id/edit_field"
android:layout_alignParentRight="true" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
自定义片段。同样,完整版在gitlab 上
public class CustomItemFragment extends ListFragment {
String[] DATA = new String[] {"foo1", "foo2", "foo3"};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ItemAdapter adapter = new ItemAdapter(this.getActivity().getApplicationContext(), DATA);
setListAdapter(adapter);
}
Run Code Online (Sandbox Code Playgroud)
}`
适配器(gitlab):
public class …Run Code Online (Sandbox Code Playgroud) android listview android-appcompat android-arrayadapter android-theme
使用android(23)上的最新版本与com.android.support:appcompat-v7:23.0.1和com.android.support:design:23.0.1
我收到以下错误
错误:(20,118)找不到与给定名称匹配的资源('drawable'与值'@ drawable/abc_list_selector_disabled_holo_dark').
在stackoverflow中的类似情况下,我看到版本号之间的不匹配,如下例所示
我的Gradle文件如下所示:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "a.b.c.d.defg"
minSdkVersion 7
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.android.support:design:23.0.1'
}
}
Run Code Online (Sandbox Code Playgroud) 我让一位朋友测试我的应用程序,但他注意到布局存在一些奇怪的问题。列表视图中的所有视图都将悬停在操作栏上。
问题是,我无法在我自己的设备或模拟器上重现这个,所以我假设它特定于某些版本的 Android?有谁知道这里的问题
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.brainicism.summonertracker.MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@drawable/ic_add" />
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
content_main.xml
<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"
android:paddingBottom="0dp"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<ListView
android:id="@+id/trackingList"
android:layout_width = "match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
主要活动
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Run Code Online (Sandbox Code Playgroud)
android android-appcompat android-layout android-view android-actionbar
我使用appcompat v7(23.1.1)获得MaterialDesign向后兼容性.在API 21设备上,它看起来不错.在较旧的API版本中,我的样式没有任何影响.为什么?
这是我的style.xml里面的values文件夹:
<resources>
<!--
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
<!-- customize the color palette -->
<item name="android:colorPrimary">@color/teal200</item>
<item name="android:colorPrimaryDark">@color/teal500</item>
<item name="android:colorAccent">@color/material_green_A200</item>
<item name="android:statusBarColor">@color/teal500</item>
<item name="android:navigationBarColor">@color/teal500</item>
<item name="android:windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:colorButtonNormal">@color/button</item>
<item name="colorControlNormal">@color/deeporange300</item>
<item name="colorControlActivated">@color/deeporange500</item>
<item …Run Code Online (Sandbox Code Playgroud) <style name="Theme_Base_App" parent="Base.Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
Run Code Online (Sandbox Code Playgroud)
我只是将上面的代码复制到我的styles.xml文件中,然后复制
android:theme="@style/Theme_Base_App"
Run Code Online (Sandbox Code Playgroud)
进入我的清单文件。我现在如何更改此操作栏的颜色?
另外,有人可以通过使用这些代码行来解释我到底在做什么吗?清单文件有什么用?我在 Styles.xml 文件中做了什么?
java android android-appcompat android-layout android-actionbar
我需要在我的 SearchView 是否折叠时进行拦截,以便更改我的 Activity 中的某些片段,即 AppCompatActivity。我使用MenuItemCompat.setOnActionExpandListener方法创建了一个侦听器,但似乎从未调用过它。同样奇怪的是,在我的方法onOptionsItemSelected 中,经过一些调试后,我检查了一下,仍然在这里我什么也无法接受。我尝试了这里建立的各种方法来解决这个问题,但没有办法解决它。这是我的代码:
menu_search_cat.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".CategoriesActivity">
<item android:id="@+id/search"
android:title="@string/search_title"
android:orderInCategory="1"
android:icon="@android:drawable/ic_menu_search"
app:showAsAction="always"
app:actionViewClass="android.widget.SearchView" />
Run Code Online (Sandbox Code Playgroud)
分类活动
import android.widget.SearchView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_categories);
...
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_search_cat, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
final SearchView searchView =
(SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getComponentName()));
searchView.setOnQueryTextListener(this);
MenuItem searchItem = …Run Code Online (Sandbox Code Playgroud) 我正在使用导航抽屉,这没有错误
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
Run Code Online (Sandbox Code Playgroud)
但是在androidx中更新后
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.appcompat:design:1.1.0'
Run Code Online (Sandbox Code Playgroud)
此代码不适用于导航抽屉。
我的问题是这种情况下的依赖是什么。请帮忙。
android android-appcompat android-support-library material-components-android androidx
android ×10
android-view ×1
androidx ×1
java ×1
listview ×1
material-components-android ×1
searchview ×1
toolbar ×1
xml ×1