TL; DR:我正在寻找一个我将称之为“Gmail三片段animation”场景的完整工作示例 。 具体来说,我们要从两个片段开始,像这样: 在某些UI事件(例如,点击片段B中的某些内容)时,我们希望: 片段A滑出屏幕左侧 片段B滑动到屏幕的左边缘并缩小以占据由片段A腾出的点 碎片C从屏幕右侧滑入,并占据碎片B腾出的空间 而且,在后退button上,我们希望这组操作被颠倒。 现在,我已经看到了很多部分的实现; 我会在下面回顾其中的四个。 除了不完整之外,他们都有自己的问题。 @Reto Meier对同样的基本问题贡献了这个stream行的答案 ,表明你将使用setCustomAnimations()和FragmentTransaction 。 对于一个双片段的情况(例如,你最初只能看到片段A,并且想用一个新的使用animation效果的片段Breplace它),我完全同意。 然而: 既然你只能指定一个“in”和一个“out”animation,我看不到你将如何处理三片段场景所需的所有不同的animation 他的示例代码中的<objectAnimator>使用像素中的硬连线位置,在屏幕尺寸不同的情况下,这似乎是不切实际的,但setCustomAnimations()需要animation资源,不能在Java中定义这些东西 我不知道如何使用LinearLayout android:layout_weight类的东西来dynamic缩放对象animation,以便按百分比分配空间 我不知道如何处理碎片C( GONE ? android:layout_weight of 0 ?pre-animated to scale of 0?else else?) @Roman Nurik指出, 你可以animation任何属性 ,包括你自己定义的属性 。 这可以帮助解决硬连接位置的问题,这是以创build您自己的自定义布局pipe理器子类为代价的。 这有助于一些,但我仍然对Reto的其他解决scheme感到困惑。 这个pastebin条目的作者显示了一些诱人的伪代码,基本上说,所有三个片段最初将驻留在容器中,通过hide()事务操作,片段C隐藏在一开始。 然后我们show() C并hide() A发生UI事件。 但是,我不知道如何处理B更改大小的事实。 它也依赖于你显然可以添加多个片段到同一个容器的事实,我不知道这是否是长期可靠的行为(更不用说它应该打破findFragmentById() ,虽然我可以生活那)。 这篇博文的作者指出,Gmail根本不使用setCustomAnimations() ,而是直接使用对象animation(“你只需改变根视图的左边距+改变右视图的宽度”)。 但是,这仍然是AFAICT的两部分解决scheme,并且再一次显示了以像素为单位的硬线尺寸。 我会继续阻止这个,所以我有可能在某天将自己回答,但是我真的希望有人为这个animation场景制定了三段解决scheme,并且可以发布代码(或者链接)。 Android中的animation让我想把我的头发拉出来,而那些看到我的人都知道这是一个毫无结果的努力。
在android中,一个片段(比如说FragA )被添加到backstack中,另一个片段(比如FragB )到达顶端。 现在打回FragA来到顶部和onCreateView()被调用。 现在我把FragA置于一个特定的状态,然后FragB被推到了最前面。 我的问题是如何将FragA恢复到之前的状态? 有没有一种方法来保存状态(如在一个捆绑说),如果是的话,那么我应该重写哪种方法?
我写了一个虚拟活动,在两个片段之间切换。 当你从FragmentA到FragmentB时,FragmentA被添加到后端堆栈。 然而,当我回到FragmentA(通过按回),一个全新的FragmentA被创build,并且它所处的状态已经丢失。 我觉得我跟这个问题是一样的,但是我已经包含了一个完整的代码示例来帮助解决这个问题: public class FooActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final FragmentTransaction transaction = getFragmentManager().beginTransaction(); transaction.replace(android.R.id.content, new FragmentA()); transaction.commit(); } public void nextFragment() { final FragmentTransaction transaction = getFragmentManager().beginTransaction(); transaction.replace(android.R.id.content, new FragmentB()); transaction.addToBackStack(null); transaction.commit(); } public static class FragmentA extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup […]
有人知道如何使用Fragment s实现标准Androidsearch界面的教程或例子吗? 换句话说,是否有可能把一个标准的search与SearchManager在一个片段?
这应该是一个简单的任务,但由于某种原因,我可以find一种方法来设置一个DialogFragment的标题。 (我使用onCreateView重载设置对话框内容)。 默认样式为标题留下了一个位置,但在DialogFragment类中找不到任何方法来设置它。 当onCreateDialog方法被用来设置内容的时候,标题被神奇地设置了,所以我想知道这是否是devise,或者在使用onCreateView过载时有一个特殊的技巧来设置它。
我在Android.App中找不到FragmentPagerAdapter。 我不想使用Android.Support.V4.App中的Fragment,因为我的目标API是14以上(Android 4.0以上)。 所以,我只想使用Android.App.Fragments,并有关联的类。 我只发现它在Android.Support.V4.App,但是这不足以让我b / c我试图使用Android.App.Fragment的(不是Android.Support.V4.App.Fragment的)和那里Android.App(不是Android.Support.V4.App)中的相关类,如果我从FragmentPagerAdapter派生我的分页器(如果它来自支持库),我的代码就不会编译,因为Android.App和Android.Support之间的结果types不匹配.V4.App。 就像在这里的情况不能转换为android.app.Fragment ,是否有一个“普通”的pager(PagerAdapter)类,我应该使用的地方FragmentPagerAdapter或东西(就像你从正常的活动,而不是FragmentActivity派生,当瞄准API 11或更高)。 以下是我正在使用的示例代码(它来自https://github.com/xamarin/monodroid-samples/tree/master/Support4中的MonoDroid示例的Support4.sln解决scheme中的FragmentPagerSupport.cs文件)。 我已经注释了引用Android.Support.V4.App的行,并将其replace为引用Android.App的代码。 Android.Support.V4.App之外没有FramePagerAdapter,我可以find,我真的需要它)。 谢谢。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Android.App; using Android.Content; using Android.OS; using Android.Runtime; using Android.Views; using Android.Widget; //using Android.Support.V4.App; //using Android.Support.V4.View; namespace Support4 { [Activity (Label = "@string/fragment_pager_support")] [IntentFilter (new[]{Intent.ActionMain}, Categories = new[]{ "mono.support4demo.sample" })] //public class FragmentPagerSupport […]
我正在使用DialogFragments的许多事情:从列表中select项目,input文本。 什么是最好的方式返回一个值(即从列表中的string或项目)回到调用活动/片段? 目前,我正在使调用活动实现DismissListener并给DialogFragment一个参考活动。 然后Dialog调用活动中的OnDimiss方法,活动从DialogFragment对象中获取结果。 非常混乱,而且在DialogFragment失去对活动的引用时,它不能在configuration更改(方向更改)上工作。 谢谢你的帮助。
介绍: 基本的“片段教程”模式是这样的: 在平板电脑上,左侧有一个列表,右侧是详细信息。 两者都是Fragments ,都在同一个Activity 。 在电话中,在一个Activity有一个Fragment列表。 用细节Fragment启动一个新的Activity 。 (例如Dianne Hackborn提供的Android 3.0 Fragments API和Fragments API指南 ) 在这两个设备上,function在Fragments 。 (简单) 在平板电脑上 ,整个应用程序是1个Activity ,在手机上有很多Activities 。 问题: 是否有理由将手机应用分成许多Activities ? 这种方法的一个问题是,你在主要的平板电脑Activity ,以及在单独的电话Activities 复制了大量的逻辑 。 在这两种情况下保留1 Activity模型是否容易,使用相同的逻辑来切换Fragments (只是使用不同的布局)? 这样,大部分的逻辑就驻留在Fragments本身中,而且只有一个Activity – 没有重复的代码。 另外我读到的有关ActionBarSherlock是,它似乎最好的Fragments而不是Activities (但我还没有与它合作)。 这些教程是简单的,还是我错过了这个方法中的一些重要的东西? 我们已经在办公室成功地尝试了两种方法 – 但是我即将开始一个更大的项目,并希望尽可能让事情变得简单。 一些相关问题的链接: 困境:何时使用片段vs活动: 模式何时使用活动转换与dynamic片段 Android – 我需要一些片段与活动和意见的澄清 Android中的活动或片段? 多个片段和活动交互devise 那么Android 3.0中片段的确切优势是什么? 更新 开始赏金问题 – […]
当我在另一个片段(我们称之为main)上显示一个片段(全屏幕背景为#77000000 )时,我的主片段仍然对点击作出反应(即使我们没有看到它,也可以点击一个button)。 问 :如何防止点击第一(主)片段? 编辑 不幸的是,我不能隐藏主要的片段,因为我使用了第二个片段的透明背景(所以用户可以看到后面的内容)。
我从我的片段开始一个新的活动 startActivityForResult(intent, 1); 并想要处理Fragment的父Activity中的结果: @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.d(TAG, "onActivityResult, requestCode: " + requestCode + ", resultCode: " + resultCode); if (requestCode == 1) { // bla bla bla } } 问题是,我从来没有得到我刚刚发布到startActivityForResult()的requestCode 。 我得到了像0x40001,0x20001等随机更高位集。 文件没有说这个。 有任何想法吗?