我正在使用工具栏作为活动中的操作栏.我正在尝试将该方法添加getActionBar().setDisplayHomeAsUpEnabled(true);到Activity.java文件中以用于较旧设备的向上导航.
该方法在Android Studio中生成以下错误消息:
方法调用可能会产生java.lang.NullPointerException
工具栏上的向上导航在较新的设备上运行良好...现在我正在试图弄清楚如何确保它适用于旧设备.请指教.
来自build.gradle:
dependencies {
compile "com.android.support:appcompat-v7:22.1.0"
}
Run Code Online (Sandbox Code Playgroud)
来自AndroidManifest.xml:
android:theme="@style/Theme.AppCompat.NoActionBar.FullScreen"
Run Code Online (Sandbox Code Playgroud)
来自styles.xml
<style name="Theme.AppCompat.NoActionBar.FullScreen" parent="AppTheme">
<item name="android:windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
Run Code Online (Sandbox Code Playgroud)
来自Activity.java
public class CardViewActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.cardviewinput);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
// Up navigation to the parent activity for 4.0 and earlier
getActionBar().setDisplayHomeAsUpEnabled(true);
toolbar.setNavigationIcon(R.drawable.ic_action_previous_item);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
}
}
Run Code Online (Sandbox Code Playgroud) 我刚刚将一个Android工具栏添加到我正在处理的应用中.工具栏放置正确,工具栏布局显示在显示屏顶部.但是,工具栏显示为空白彩色条...应用程序标题和溢出图标不会显示在工具栏中.有关如何修复的任何想法?
ToolbarActivity.java:
public abstract class ToolbarActivity extends ActionBarActivity {
private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
setSupportActionBar(toolbar);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
toolbar.setTitle("app name");
}
}
Run Code Online (Sandbox Code Playgroud)
toolbar.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
android:background="@color/ColorPrimary" >
</android.support.v7.widget.Toolbar>
menu_main.xml:
<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=".MainActivity">
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="100"
app:showAsAction="always" />
</menu>
Run Code Online (Sandbox Code Playgroud)
style.xml:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="colorPrimary">@color/ColorPrimary</item>
<item name="colorPrimaryDark">@color/ColorPrimaryDark</item>
</style>
Run Code Online (Sandbox Code Playgroud) 我有onClickListener一个CheckBox用于RecyclerView保存CardView列表的设置.在我的ItemHolder扩展中设置了监听器ViewHolder.初始点击CardView检查CheckBox并将CardView的背景颜色从默认的白色切换为红色.这工作正常.
我也有自己的OnClickListener设置CardView.它OnClickListener是在onCreateViewHolder().中设置的.单击将CardView启动新的详细活动CardView.这工作正常.
最后,我尝试onLongClickListener在CardView上设置一个.该OnLongClickListener设置在onCreateViewHolder().CardView上的longpress意味着将背景颜色切换为红色并启动AlertDialog,以便用户可以确认将从列表中删除CardView.这可以正常工作,但是当这个代码添加到适配器时OnClickListerner,CardView的CheckBox不再有效.就好像它OnLongClickListner与CheckBox监听器冲突一样.注意我在itemHolder的onLongClick()代码中"返回true" .我在这里错过了什么?
Adapter.java
public MyRecylerAdapter(Context context, ArrayList<ListItem> listItems, ArrayList<ListItem> selectedList) {
this.mContext = context;
this.mListItems = listItems;
this.selectedItemsList = selectedList;
}
private int selectedPos = -1;
...
private class ItemHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private CardView cardView;
private CheckBox chkSelected;
private …Run Code Online (Sandbox Code Playgroud) 我正在使用v7.widget.Toolbar支持库和v7.app.ActionBarActivity的工具栏.当onCreateOptionsMenu在工具栏上膨胀时,我看到工具栏最左侧的标准"后退"箭头和工具栏最右侧的标准"溢出"点.
我想隐藏或禁用这些默认图标,并替换为另一组Android推荐图标.有关如何修复的任何想法?
MyActiviy.java:
公共类MyActivity扩展ActionBarActivity {
private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home); {
toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("sc");
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
...
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
...
Run Code Online (Sandbox Code Playgroud) 首次打开对话框时,DatePickerDialog将被加载到Fragment中,其中以今天的显示为默认日期。然后,用户选择一个日期,然后关闭该对话框。在下一次重新打开时,如何显示以前选择的日期作为默认日期,而不是显示今天的日期?
我曾在Activity中尝试过.set(),但不知道如何使用.get()来检索片段中的日期。我已经尝试过在Activity和片段之间使用侦听器进行接口,但是无法使其正常工作,对于我要实现的简单任务而言,它似乎过于复杂。而且我尝试了从Activity发送到片段的捆绑包,但是我也无法使其正常工作。请指教。
活动文件:
...
final Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
c.set(Calendar.DAY_OF_MONTH, day);
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getSupportFragmentManager(), "datePicker");
Run Code Online (Sandbox Code Playgroud)
片段文件:
...
public static class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
return new DatePickerDialog(getActivity(), this, year, month, day);
}
public void onDateSet(DatePicker view, …Run Code Online (Sandbox Code Playgroud) 当EditTextUI中的一行获得焦点时,将DatePickerFragment启动用户输入日期.
在方向更改时,如果EditText线具有焦点和先前输入的日期(这样length() > 0),我不希望片段自动显示.
有没有办法修改或添加代码,以便如果新创建活动并且该EditText行具有焦点,它将不会自动启动 DatePickerFragment?
做某事是不是一个好主意onResume()?
或做的东西savedInstanceState()和!=null?
public class Activity extends AppCompatActivity {
...
EditText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
...
if (hasFocus && (EditText.getText().length() == 0)) {
DatePickerFragment newFragment = new DatePickerFragment();
newFragment.show(getSupportFragmentManager(), "datePicker");
}
else if (hasFocus && (EditText.getText().length() > 0)) {
...
DatePickerFragment newFragment = new DatePickerFragment();
newFragment.show(getSupportFragmentManager(), "datePicker");
}
}
});
}
Run Code Online (Sandbox Code Playgroud) 我正在使用AppCompat.NoActionBar主题。我想知道如何为EditText行和DialogFragments中的标题找到默认颜色。这些默认值看起来像是深绿色,我也想知道它们是相同还是不同。是否有Android资源按平台版本列出默认颜色?
这是themes.xml:
<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)
<style name="AppTheme" parent="AppTheme.Base"/>
<style name="AppTheme.Base" parent="Theme.AppCompat.NoActionBar" >
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimary</item>
<item name="android:windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowDisablePreview">true</item>
</style>
<style name="FloatingLabel" parent="@android:style/TextAppearance" >
<item name="android:textColor">@color/colorFlLabelActivated</item>
</style>
...
Run Code Online (Sandbox Code Playgroud)
表现:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example..." >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:theme="@style/AppTheme" >
<activity
android:name="com.example..."
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example..."
android:windowSoftInputMode="stateVisible|adjustResize"
/>
</activity>
</application>
Run Code Online (Sandbox Code Playgroud)
colors.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#357EC7</color>
<color name="colorHint">#C0C0C0</color>
<color name="colorFlLabelActivated">#357EC7</color>
</resources>
Run Code Online (Sandbox Code Playgroud) android android-theme android-edittext android-dialogfragment
我已经阅读了 Android 开发人员信息以及许多 SO 帖子和 RecyclerView 文章。我仍然不清楚我是否可以使用:
recyclerView.setHasFixedSize(true);
Run Code Online (Sandbox Code Playgroud)
我的 RecyclerView 列表中的方法。随着 CardView 项目随着时间的推移动态添加和删除,我的 RecyclerView 列表的大小将不断变化。但是,每个 CardView 的大小(高度和长度)是固定的。请指教。
我在 CardView 布局文件中有复选框代码。CardView 具有白色背景。通常,我认为未选中的 Checkbox 是一个黑色方块。我的布局没有显示空白复选框。我所看到的只是白色的 CardView 背景(屏幕截图中的顶部 CardView)。当我单击设置复选框代码格式的 CardView 最右侧区域时,会出现一个绿色复选框(屏幕截图中的底部 CardView)。我在这里缺少什么?
.
布局文件:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/background4main" >
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/singlecard_view1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardBackgroundColor="@android:color/white"
card_view:cardCornerRadius="6dp"
android:orientation="horizontal"
android:layout_margin="4dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:selectableItemBackground" >
<TextView
android:id="@+id/cardBlankText2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:text="todo"
android:textStyle="bold"
android:textColor="@android:color/black"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="20sp" />
<TextView
android:id="@+id/cardBlankText3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/cardBlankText2"
android:text="note1"
android:textStyle="bold"
android:textColor="@android:color/black"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="20sp" />
<CheckBox
android:id="@+id/chkSelected"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true" />
</RelativeLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
Adapter file:
...
public class ListViewHolder extends RecyclerView.ViewHolder {
TextView cardBlankText2; …Run Code Online (Sandbox Code Playgroud) 我有一个 RecyclerView 列表,最近布局 Activity_main.xml 中出现了“渲染问题”:
java.lang.NoSuchFieldError: ACTION_SCROLL_IN_DIRECTION at androidx.core.view.accessibility.AccessibilityNodeInfoCompat$Api34Impl.getActionScrollInDirection(AccessibilityNodeInfoCompat.java:5592) [堆栈错误的其余部分如下所示]
一个针对 Android 错误的在线谷歌论坛表明,该问题可能是“implementation 'androidx.core:core:1.12.0'”中的错误,该错误已在下一个 alpha 版本中得到解决。因此,我加载了“implementation 'androidx.core:core:1.13.0-alpha01'”,但这并没有消除问题。
关于这个问题以及如何解决它有什么想法吗?
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.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:background="#FFFFFF"
android:paddingBottom="5dp"
tools:context=".MainActivity" >
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar_main"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" >
<androidx.appcompat.widget.AppCompatImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/action_logo"
android:title="@string/action_logo"
android:contentDescription="@string/action_logo"
android:src="@drawable/ic_toolbar_logo_foreground"
android:background="#FFFFFF"
android:gravity="start"
android:clickable="true"
android:focusable="true"
app:showAsAction="always" />
</androidx.appcompat.widget.Toolbar>
</com.google.android.material.appbar.AppBarLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="com.google.android.material.appbar.
AppBarLayout$ScrollingViewBehavior"
android:layout_marginStart="6dp"
android:layout_marginLeft="6dp"
android:layout_marginTop="5dp"
android:layout_marginEnd="6dp"
android:layout_marginRight="6dp"
tools:context=".MainActivity"
android:background="@color/colorFlLabelFinal" >
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/filterListTV"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_marginStart="14dp" …Run Code Online (Sandbox Code Playgroud) 我有一个片段,它启动一个TimePicker对话框供用户选择一天中的时间.我希望对话框启动时间为下午4:00时显示的默认时间.然后,用户可以选择他们自己的时间.我一直在尝试setHour和setMinute但无济于事.
下面是设置为当前时间的TimePicker的部分代码.请告知如何修改以在TimePicker对话框首次启动时始终显示下午4:00.
...
public Dialog onCreateDialog(Bundle savedInstanceState) {
cal = Calendar.getInstance();
hour = cal.get(Calendar.HOUR_OF_DAY);
minute = cal.get(Calendar.MINUTE);
TimePickerDialog dialog = new TimePickerDialog(getActivity(),this,hour,minute,
dialog.setTitle("Select...");
return dialog;
}
Run Code Online (Sandbox Code Playgroud) 我能够为包装EditText的TextInputLayout更改浮动标签的颜色.当它在动画阶段使用下面的代码浮动时,我可以使用"android:textColor"选择黑色(默认为白色).我试图在EditText变得不聚焦时选择不同的颜色 - 这意味着当浮动标签在EditText上方永久化时.我的最低API是14.请指教.
partial themes.xml文件:
<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)
<style name="AppTheme" parent="AppTheme.Base"/>
<style name="AppTheme.Base" parent="Theme.AppCompat.NoActionBar" >
...
</style>
<style name="FloatingLabel" parent="@android:style/TextAppearance" >
<item name="android:textColor">#000000</item>
</style>
Run Code Online (Sandbox Code Playgroud)
部分layout.xml文件:
...
<android.support.design.widget.TextInputLayout
android:id="@+id/ToDo_text_input_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:hintTextAppearance="@style/FloatingLabel"
>
...
Run Code Online (Sandbox Code Playgroud) 在 AndroidManifest 文件中,我想在用户重新启动设备时捕获 BOOT_COMPLETED 事件。我正在添加此权限:
“使用权限 android:name="android.permission.RECEIVE_BOOT_COMPLETED”
我在 Stackoverflow 上看到了其他人使用的两个“意图过滤器”:
“Intent.ACTION_BOOT_COMPLETED”和
“android.intent.action.BOOT_COMPLETED”
这里的首选操作字符串是什么?请指教和解释。