我正在尝试使用SearchView我的应用程序.首先,我添加appcompat到我的项目:
compile "com.android.support:appcompat-v7:19.0.1+"
Run Code Online (Sandbox Code Playgroud)
我将此代码添加到菜单中:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/action_search"
android:title="@string/search"
android:icon="@drawable/ic_action_search"
android:showAsAction="ifRoom|collapseActionView"
android:actionViewClass="android.support.v7.widget.SearchView" />
</menu>
Run Code Online (Sandbox Code Playgroud)
但是当我开始时,activity我得到了这个:
03-07 17:25:39.110 16861-16861/de.treevo.app W/MenuInflater:无法在java.lang.reflect.Constructor中实例化类:android.support.v7.widget.SearchView java.lang.reflect.InvocationTargetException. android.view.MenuInflater $ MenuState.adInstter(MenuInflater.java:471)在android.view.MenuInflater $ MenuState.addItem的android.view.MenuInflater $ MenuState.setItem(MenuInflater.java:430)上的newInstance(Native Method) MenuInflater.java:451)在android.view.MenuInflater.parseMenu(MenuInflater.java:188),位于de.treevo.app.search.onCreateOptionsMenu(search.java :260)在com.android.internal.policy.impl的com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:489)的android.app.Activity.onCreatePanelMenu(Activity.java:2538). PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:853)at com.android.internal.policy.impl.PhoneWindow $ 1.run(PhoneWindow.java:273)at android.view.Choreographer $ CallbackRecord.run(Choreograph)er.java:761)在Android.view.Choreographer(Page 4)上的android.view.doCallbacks(Choreographer.java:574),android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java) :747)在android.os.Handler.handleCallback(Handler.java:733)在android.os.Handler.dispatchMessage(Handler.java:95)在android.os.Looper.loop(Looper.java:136)在android .app.ActivityThread.main(ActivityThread.java:5017)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779)at com的java.lang.reflect.Method.invoke(Native Method) .android.internal.os.ZygoteInit.main(ZygoteInit.java:595)引起:android.view.InflateException:二进制XML文件行#41:在android.view.LayoutInflater.createView(LayoutInflater.java:620)中输出类错误)在android.view.LayoutInflater.createVie的android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)的com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)中 位于android.view.LayoutInflater.inflate(LayoutInflater.java:492)的android.view.LayoutInflater.inflate(LayoutInflater.java)中的android.view.LayoutInflater.inflate(LayoutInflater.java:694)中的wFromTag(LayoutInflater.java:694) :397)在android.support.v7.widget.SearchView.(SearchView.java:262)的android.support.v7.widget.SearchView.(SearchView.java:254)at java.lang.reflect.Constructor.newInstance(在android.view.MenuInflater $ MenuState.newInstter(MenuInflater.java:471)的android.view.MenuInflater $ MenuState.setItem(MenuInflater.java:430)android.view.MenuInflater $ MenuState.addItem(MenuInflater. java:451)在android.view.MenuInflater.parseMenu(MenuInflater.java:188)的android.view.MenuInflater.inflate(MenuInflater.java:110)at de.treevo.app.search.onCreateOptionsMenu(search.java:260) )在com.android.interna的android.app.Activity.onCreatePanelMenu(Activity.java:2538)l.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:489)位于com.android.internal.policy.impl.PhoneWindow $ 1的com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:853) .run(PhoneWindow.java:273)在android.view.Choreographer $ dovographer上运行android.view.Chore:(Choreographer.java:761),在android.view.Choreographer.doFrame上安装android.view.doCallbacks(Choreographer.java:574) Choreographer.java:543)在android.view.Handler.dispatchMessage(Handler.java)的android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:747)android.os.Handler.handleCallback(Handler.java:733) :95)在android.app.Looper.loop(Looper.java:136)的android.app.ActivityThread.main(ActivityThread.java:5017)at java.lang.reflect.Method.invoke(Native Method)at com. android.internal.os.ZygoteInit $ …
新手试图完成我的第一个由谷歌提供的应用程序教程.在去往这个致命异常的路上,我确实导入了很多随机软件包来摆脱许多事情的"无法解决"错误,ActionBarActivity,EditText,Fragment,LayoutInflater等,但不确定这是否重要.无论如何,当我点击主活动中的"发送"按钮时,我的应用程序崩溃并产生致命异常.这是我的代码和logcat文件.
MyActivity.java(本教程的MainActivity.java)
package magiccoupons.tutapp;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
public class MyActivity extends Activity {
public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.my, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The …Run Code Online (Sandbox Code Playgroud) AppCompat视图组件和标准/默认视图组件之间有什么区别?
例如,an AppCompatEditText和an EditText之间或a AppCompatButton和a 之间的差异Button.
查看开发人员文档android.support.v7.widget,AppCompat视图组件被描述为" tint aware ",但这是唯一的区别,这究竟是做什么的?
android android-appcompat android-view android-support-library
好的,我真的很困惑如何使用最新的appcompat v23.0.1正确地创建自定义对话框这里有几种方法
第一种方式:
public class AddTipDialogFrag extends DialogFragment
{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
int title = getArguments().getInt("title");
AppCompatDialog dialogCompat = new AppCompatDialog(getActivity(), R.style.MyAlertDialogStyle);
dialogCompat.setTitle(title); //doesn't work btw
dialogCompat.setContentView(R.layout.add_tip_fragment);
return dialogCompat;
}
}
Run Code Online (Sandbox Code Playgroud)
第二种方式:
public class AddTipDialogFrag extends AppCompatDialogFragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.add_tip_fragment,container, false);
int title = getArguments().getInt("title");
getDialog().setTitle(title);
return view;
}
}
Run Code Online (Sandbox Code Playgroud)
两种方式似乎产生相同的结果.我个人更喜欢第一种方式,但是当连线视图边框结束时会出现涟漪效应问题,如下图所示.
这是一个错误吗?(一定是!)我可以修复它还是应该转换到第二种方式?(这对涟漪效果很好).考虑到大多数材料对话框库使用第一种方式,这两种方法之间的最佳方法是什么?
编辑:第一种方式上的波纹故障似乎不再发生,所以我仍然不确定哪两种是正确的方式.
android android-appcompat android-dialog android-dialogfragment
我正在AppCompatAndroid项目中使用支持库.AppCompat有大量的drawables和资源,我不在我的应用程序中使用.那些不必要的文件将我的900K应用程序增加到2M以上,这是我不喜欢的.
有没有办法在创建APK文件时排除这些文件?或者我应该在我的代码中混淆库而不是依赖?我在Android Studio中使用Gradle.
谢谢
编辑1我已经使用了proguard.但是proguard不知道我不想拥有drawable-xxxhdpi或者values-it例如.
编辑2我也使用Android Lint,它无法帮助我,因为我不直接访问lib的代码,并且android在构建APK文件时添加它们.
android android-appcompat apk android-support-library android-gradle-plugin
在更新到Eclipse Kepler之后,我无法添加支持库appcompat.我已按照此说明操作,但仍然收到错误导入android.support.v7.app无法在以下行中解析:
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
Run Code Online (Sandbox Code Playgroud)
我添加了appcompat项目,将两个jar添加到Build Path,在Order and Export选项卡上选择它们,并在主项目中添加了库项目.


我将v4库复制到主项目中的libs文件夹,但我不知道还能做什么或检查.有没有人有什么建议??
谢谢!
我不知道我应该在哪里解决这个问题,如果这是我的错,那么Picasso Lib Wrong或Cardview Library中就会有一些东西.
基本上我有一个CardView图像(全卡覆盖)和A TextView覆盖.
在Android 5.0设备上运行代码时,一切正常,Image获取其圆角.
但是,如果我在5.0之前的设备上运行它,图像重叠Cardlayout并且没有圆角.
你可以看看这个图片的比较:

以下是一些代码片段:
layout_row.xml
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/pandaImage"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_centerInParent="true"
android:scaleType="centerCrop" />
<TextView
android:id="@+id/pandaName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/pandaImage"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:background="@color/photo_tint"
android:clickable="true"
android:focusable="true"
android:gravity="center"
android:textColor="@android:color/white"
android:textSize="24sp" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
加载图像的Recycler Adapter:
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
Photo p = photos.get(i);
Picasso.with(mContext).load(p.getUrl()).fit().into(viewHolder.mImage);
viewHolder.mPandaName.setText(p.getTitle());
}
Run Code Online (Sandbox Code Playgroud) 我想将自定义样式应用于SwitchCompat.更改可打开和关闭状态的drawable和文本.我怎样才能做到这一点?我找不到任何关于如何做到这一点的例子.我在styles.xml中尝试了以下内容,但显然我没有使用正确的父:
<style name="Switch" parent="android:Widget.AppCompat.Widget.CompoundButton.SwitchCompat">
<item name="android:textOn">@string/common_yes</item>
<item name="android:textOff">@string/common_no</item>
<item name="android:thumb">@drawable/btn_switch_selector</item>
<item name="android:track">@drawable/btn_switch_bg_selector</item>
</style>
Run Code Online (Sandbox Code Playgroud)
编辑
我设法在代码中更改drawables.
switchView.setThumbResource(R.drawable.btn_switch_selector);
switchView.setTrackResource(R.drawable.btn_switch_bg_selector);
Run Code Online (Sandbox Code Playgroud)
但我还没有找到改变开关文本的方法.以下代码段似乎不起作用.也许我需要设置更多的文本属性?
switchView.setTextOn(context.getString(R.string.common_yes));
switchView.setTextOff(context.getString(R.string.common_no));
Run Code Online (Sandbox Code Playgroud)
根据SwitchCompat源代码,应支持开/关文本:https: //android.googlesource.com/platform/frameworks/support/+/421d8baa4a524e1384bcf033360bccaf8d55081d/v7/appcompat/src/android/support/v7/widget/ SwitchCompat.java
{@link #setText(CharSequence)text}属性控制切换标签中显示的文本,而{@link #setTextOff(CharSequence)off}和{@link #setTextOn(CharSequence)on}文本控制文本在拇指上.
编辑2
终于找到了代码解决方案.显然setShowText()需要设置true为文本显示在开关上.
switchView.setTextOn(context.getString(R.string.common_yes));
switchView.setTextOff(context.getString(R.string.common_no));
switchView.setShowText(true);
switchView.setThumbResource(R.drawable.btn_switch_selector);
switchView.setTrackResource(R.drawable.btn_switch_bg_selector);
Run Code Online (Sandbox Code Playgroud)
和xml解决方案
<android.support.v7.widget.SwitchCompat
android:id="@+id/view_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:thumb="@drawable/btn_switch_selector"
app:track="@drawable/btn_switch_bg_selector"
android:textOn="@string/common_yes"
android:textOff="@string/common_no"
app:showText="true" />
Run Code Online (Sandbox Code Playgroud)
我还是想知道是否有办法把它放进去styles.xml.
我在Android崩溃报告中看到以下错误:
android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.support.v7.widget.Toolbar$SavedState
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2318)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3974)
at android.app.ActivityThread.access$900(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1299)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:149)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
at dalvik.system.NativeStart.main(NativeStart.java)
Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.support.v7.widget.Toolbar$SavedState
at android.os.Parcel.readParcelableCreator(Parcel.java:2154)
at android.os.Parcel.readParcelable(Parcel.java:2104)
at android.os.Parcel.readValue(Parcel.java:2020)
at android.os.Parcel.readSparseArrayInternal(Parcel.java:2382)
at android.os.Parcel.readSparseArray(Parcel.java:1742)
at android.os.Parcel.readValue(Parcel.java:2077)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2321)
at android.os.Bundle.unparcel(Bundle.java:249)
at android.os.Bundle.getSparseParcelableArray(Bundle.java:1273)
at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:1744)
at android.app.Activity.onRestoreInstanceState(Activity.java:1017)
at android.app.Activity.performRestoreInstanceState(Activity.java:989)
at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1138)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2284)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3974)
at android.app.ActivityThread.access$900(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1299)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:149)
at …Run Code Online (Sandbox Code Playgroud) android android-appcompat android-toolbar android-savedstate
这两个对象(SwitchCompat和SwitchMaterial)之间有什么区别?我已经尝试过它们并且在视觉上它们是相同的。
顺便问一下,他们为什么要删除这个Switch类?您知道将来应该用哪个 UI 元素来替换它吗?
android lint android-appcompat android-switch material-components-android
android ×10
android-view ×1
apk ×1
cardlayout ×1
eclipse ×1
java ×1
lint ×1
material-components-android ×1
picasso ×1
switchcompat ×1