在Android SDK文档中看到了新的包.所有这些都在API级别24中可用,它对应于Android Nougat,似乎用' android.icu.xxx ' 替换' java.xxx '包.例如:
该java.text.DateFormat中的包被复制在android.icu.text.DateFormat等
此外,在一些icu类中出现以下注释:
[icu增强] ICU替代(类名).ICU特有的方法,字段和其他功能标记为"[icu]".
那么,ICU代表什么呢?java和android.icu包之间有什么区别?java包是否会很快被弃用?
我正在为我的应用程序实现材料设计.我看到可以在这里进行活动之间的转换:http://android-developers.blogspot.com.es/2014/10/implementing-material-design-in-your.html
所以我试着按照"真实动作"部分说的:
ActivityMain.java
Intent intent = new Intent();
String transitionName = getString(R.string.transition_album_cover);
…
ActivityOptionsCompat options =
ActivityOptionsCompat.makeSceneTransitionAnimation(activity,
albumCoverImageView, // The view which starts the transition
transitionName // The transitionName of the view we’re transitioning to
);
ActivityCompat.startActivity(activity, intent, options.toBundle());
Run Code Online (Sandbox Code Playgroud)
activity_main.xml中
<ImageView
…
android:transitionName="@string/transition_album_cover" />
Run Code Online (Sandbox Code Playgroud)
activity_details.xml
<ImageView
…
android:transitionName="@string/transition_album_cover" />
Run Code Online (Sandbox Code Playgroud)
但是,这似乎使默认的android活动转换,我看不到动画.
请记住,我在这里调用了requestWindowFeature(Window.FEATURE_CONTENT_TRANSITIONS)http://developer.android.com/reference/android/support/v4/app/ActivityOptionsCompat.html#makeSceneTransitionAnimation (android.app.Activity ,android). view.View,java.lang.String)
所有这些都是使用Nexus4 API Level 19测试的
问题出在哪儿?
我想在点击这些操作按钮时关闭通知操作按钮(而不是整个通知).(可以说:带有停止操作按钮的下载通知.单击停止时,关闭停止按钮并将contentText更改为"下载已取消")
我唯一想到的是取消通知并通知另一个具有相同ID的通知,但这似乎是一个丑陋的解决方法......
那么,有没有办法从通知中删除动作按钮?
(我认为没有必要提供任何代码,但如果必要,我会...)
我的应用程序的作用是显示通过windowManager.addView()和WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY标记附加的系统覆盖视图.这是通过服务完成的,该服务管理视图可见性和其他一些事情.
但是,我收到崩溃报告,无法重现它们.崩溃堆栈跟踪也与我的应用程序包无关,所以我真的无法解决这个问题的根源.以下是来自不同来源的两个堆栈跟踪,但似乎是相关的:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.measure(int, int)' on a null object reference
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2388)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2101)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1297)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7011)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:777)
at android.view.Choreographer.doCallbacks(Choreographer.java:590)
at android.view.Choreographer.doFrame(Choreographer.java:560)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:763)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6938)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Run Code Online (Sandbox Code Playgroud)
.
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getMeasuredWidth()' on a null object reference
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2484)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2181)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1293)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6599)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:800)
at android.view.Choreographer.doCallbacks(Choreographer.java:603)
at …Run Code Online (Sandbox Code Playgroud) 我正在使用一个扩展Activity的类来从API获取列表...
在一些基本相同的应用程序中,开发人员扩展了ListActivity ...
哪些是差异?
我有一个RecyclerView,它在每个特定时期添加项目.添加对象时,如果列表项超过(假设)500,则将删除第一个项目并添加新项目.
如果RecyclerView不能再向下滚动,!recyclerView.canScrollVertically(1);那么在添加新项目后,RecyclerView将smoothScroolToPosition()到达最后一个位置.
问题出在哪儿? 好吧,如果ReyclerView在移除旧物品时位于中间(不是底部,而不是顶部),它会突然跳起一些位置.我希望RecyclerView不会跳转位置并保持在顶部移除物品时的位置
我尝试过layoutManager.setStackFromEnd(true);但没有运气
有什么建议?
一些代码(不相关的代码被删除).当RecyclerView从中间显示列表项并按VOLUME_UP时,我的问题可以重现:
public class ActivityMain extends ActionBarActivity {
public static final int MAX_LOG_ITEMS = 500;
private RecyclerView mRecyclerView;
private AdapterLog mRecyclerAdapter;
private boolean mAutoScroll = true;
private DataReceiver mDataReceiver;
private Handler mLogHandler = new Handler() {
@Override public void handleMessage(Message msg) {
switch (msg.what){
case DataReceiver.CAT_LOGS:
List<Log> catLogs = (List<Log>) msg.obj;
updateLogs(catLogs);
break;
case DataReceiver .CLEAR_LOGS:
if (mRecyclerAdapter.getItemCount() > MAX_LOG_ITEMS)
mRecyclerAdapter.removeFirstItems(mRecyclerAdapter.getItemCount() - MAX_LOG_ITEMS);
break;
case Logcat.REMOVE_LOGS:
mRecyclerAdapter.clear();
}
} …Run Code Online (Sandbox Code Playgroud) 我在Android应用中使用片段.在这些片段中,我需要一个Context对象来重复使用它(大约10次)和一些方法调用.
如您所知,我有两个选择:
选项I:
public class MyFragment extends Fragment{
public void onCreate(Bundle savedInstanceState){
super(savedInstanceState);
//call a lot of methods and use getActivity() a lot of times
}
}
Run Code Online (Sandbox Code Playgroud)
方案二:
public class MyFragment extends Fragment{
private Activity mActivity;
public void onCreate(Bundle savedInstanceState){
super(savedInstanceState);
mActivity = getActivity();
//call a lot of methods and use mActivity
}
}
Run Code Online (Sandbox Code Playgroud)
我知道声明mActivity字段需要一些内存(多少?),但我认为调用getActivity需要一些CPU处理.
这两个选项中哪一个更好,为什么?
编辑:
那么,看看Android源代码,我可以在Fragment类中找到getActivity()方法的来源:
final public FragmentActivity getActivity() {
return mActivity;
}
Run Code Online (Sandbox Code Playgroud)
因此,正如您所看到的,在选项II中,动态性被保留两次,这是浪费内存,所以从现在开始我将使用选项I.
谢谢你的回答,他们让我明白这个:)
这是我的问题.对于那些不知道我在问什么的人,我想让这个菜单显示在我的应用程序http://db.tt/GQX9GBYF中.问题是我不知道该怎么做.我认为我必须创建一个intent,从中获取图像路径,然后将其设置为背景.但我不知道这样做的确切方法......
拜托,有人可以发一个例子,请???? ;)
我不得不说我设法通过启动原生图库应用程序,但我也想设置动态壁纸
自从第一次发布以来,我一直在使用 Android Studio(大约一年前,自 I/O 2013 以来)
但是我最近注意到,在让您创建项目的第一个屏幕中,还有“打开”和“导入”项目选项,我找不到它们之间的任何区别
我记得在 Eclipse 中,导入项目会在工作区中复制项目......但是,据我所知,在 Android Studio 中没有工作区......
那么,Import project 和 Open project 有什么区别呢?
我现在想知道使用 @SuppressLint("RestrictedApi") 注释是否安全。我很确定答案是否定的,所以我也想问为什么。
我猜开发团队想restricted code向 API 用户隐藏这些内容。可能是由于未来的变化或者因为代码旨在用作内部功能
示例代码androidx.preference:preference:1.1.1:
public abstract class CustomAdapterPreferenceFragment extends PreferenceFragmentCompat {
@Override
protected PreferenceGroupAdapter onCreateAdapter(PreferenceScreen preferenceScreen) {
// this annotation removes warning that says PreferenceGroupAdapter can only be called from package names that start with androidx.preference
@SuppressLint("RestrictedApi")
final PreferenceGroupAdapter adapter = new PreferenceGroupAdapter(preferenceScreen) {
@Override
public void onBindViewHolder(PreferenceViewHolder holder, int position) {
super.onBindViewHolder(holder, position);
}
};
return adapter;
}
Run Code Online (Sandbox Code Playgroud)
链接到限制本示例中代码使用的注释:AOSP AndroidX
android ×10
android-ide ×1
androidx ×1
animation ×1
annotations ×1
cpu ×1
eclipse ×1
extend ×1
field ×1
icu ×1
java ×1
listactivity ×1
listitem ×1
memory ×1
package ×1
performance ×1
picker ×1
service ×1
stack-trace ×1
view ×1
wallpaper ×1