小编Car*_*son的帖子

如何在两个小部件/布局之间添加新的"浮动操作按钮"

我想你已经看到了新的Android设计指南,新的"浮动动作按钮"又名"FAB"

例如这个粉红色的按钮:

在此输入图像描述

我的问题听起来很愚蠢,我已经尝试了很多东西,但是将这个按钮放在两个布局的交叉点上的最佳方法是什么?

在上面的例子中,这个按钮完全位于我们可以想象的ImageView和relativeLayout之间.

我已经尝试了很多调整,但我确信有一个正确的方法来做到这一点.

android floating-action-button android-coordinatorlayout

282
推荐指数
9
解决办法
32万
查看次数

72
推荐指数
3
解决办法
3万
查看次数

Android Studio是否有层次结构查看器?

我试着在这里搜索但找不到答案.

我正在寻找一种从Android Studio中启动Hierarchy Viewer的方法,而不是必须在命令行启动它.我最近从Eclipse迁移到Android Studio,并且该功能在该IDE中的DDMS工具集下可用.

我查看了"Android"工具栏,可以看到屏幕截图功能,但不能查看层次结构查看器.我也在菜单系统中查看了Tools> Android,它也不存在.

android hierarchyviewer android-studio

53
推荐指数
2
解决办法
2万
查看次数

如何设计冰淇淋三明治标签之间的分隔线?

我正在使用以下样式和一组九个补丁图像在一些Ice Cream Sandwich选项卡的底部创建一条红线,而不是标准的蓝线:

<style name="customTabStyle" parent="@android:style/Widget.Holo.ActionBar.TabBar">
    <item name="android:tabStripLeft">@null</item>
    <item name="android:tabStripRight">@null</item>
    <item name="android:tabStripEnabled">false</item>
    <item name="android:showDividers">none</item>
    <item name="android:measureWithLargestChild">true</item>
    <item name="android:background">@drawable/tab_line</item>
    <item name="android:gravity">center</item>
</style>

<style name="customTabBar" parent="@android:style/Widget.Holo">
    <item name="android:showDividers">middle</item>
    <item name="android:divider">@drawable/divider2</item>
    <item name="android:dividerPadding">0dp</item>
</style>

<style name="LightThemeSelector" parent="android:Theme.Holo.Light">
    <item name="android:actionBarTabStyle">@style/customTabStyle</item>
    <item name="android:actionBarTabBarStyle">@style/customTabBar</item>
</style>
Run Code Online (Sandbox Code Playgroud)

显示红线,除了标签之间的分隔线外,每条线看起来都很好.正如您在图像中的绿色框内看到的那样,线条未在分隔线下方绘制.如何为此分隔符选择可绘制或样式?

android:dividerandroid:showDividers物品不负责标签之间的分隔符.它们仅选择在选项卡图标和选项卡标题之间绘制的分隔符.我隐藏了那些分隔线因为没有标题而分隔线看起来很奇怪.

结果标签栏的屏幕截图


更新在Aneal的回答中,我添加了第二个样式customTabBar.样式选择drawable作为分隔符.分隔线是使用以下9patch drawable创建的纯黑线:

9patch drawable创建分隔符

使用此drawable绘制分隔符,但旁边还有一个空行:

带分隔线的标签栏

android android-tabs

45
推荐指数
5
解决办法
4万
查看次数

FrameLayout.onMeasure()中的NullPointerException

编辑:我创建了一个Github项目,崩溃方式与我的应用程序完全相同.你可以在这里找到它

编辑:因为我调试了这个并尝试了各种更改,我意识到我发布的原始代码并不真正相关,所以我删除了它:

当用户按下自定义布局中插入ActionBar 的3 秒中的一个时,我Activity可以在3个不同的Fragments IconButton之间切换,例如在各种模式之间切换:

在此输入图像描述

当我第一次启动应用程序(已卸载它)时,我默认为Globe模式.Globe模式中有几个片段ViewPager,其中大部分片段都是子类android.support.v4.app.ListFragment.我在主Activity的onCreate方法中创建了所有8个选项卡.这按预期工作,一切正常加载.

当我进入"配置文件"模式(通过单击"脸部"图标按钮)时,我可以登录应用程序,并查看我的个人资料.这也按预期工作,一切正常加载.

当我再次从Android Studio 推送APK时,因为我现在已经登录(保存的首选项),它默认为"朋友提要"模式(两个人手牵着手).我可以将模式切换到配置文件,一切都按预期工作,但是当我切换到Globe模式时,它在Android代码中崩溃:

08-14 14:43:22.744  28804-29323/com.trover E/AndroidRuntime? FATAL EXCEPTION: main
    Process: com.trover, PID: 28804
    java.lang.NullPointerException
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:309)
            at android.view.View.measure(View.java:16497)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
            at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327)
            at android.view.View.measure(View.java:16497)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
            at android.view.View.measure(View.java:16497)
            at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1912)
            at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1109)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1291)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
            at android.view.Choreographer.doCallbacks(Choreographer.java:574)
            at android.view.Choreographer.doFrame(Choreographer.java:544)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager

10
推荐指数
1
解决办法
2394
查看次数

自定义视图缺少适配器工具使用的构造函数

我收到以下警告:

自定义视图com/example/view/adapter/SomeAdapter缺少工具使用的构造函数:(Context)或(Context,AttributeSet)或(Context,AttributeSet,int)

在我的类SomeAdapter中,它扩展了一些扩展ArrayAdapter的BaseAdapter

public class SomeAdapter extends BaseAdapter{}
public abstract class BaseAdapter extends ArrayAdapter<SomeModel>{}
Run Code Online (Sandbox Code Playgroud)

警告存在于具体适配器中,但不存在于抽象BaseAdapter中.在这种情况下有没有人听说过这个警告?

AFAIK Android通过ViewConstructorDetector检查超类的名称来检查类是否正在扩展视图:

 private static boolean isViewClass(ClassContext context, ClassNode node) {
    String superName = node.superName;
    while (superName != null) {
        if (superName.equals("android/view/View")                //$NON-NLS-1$
                || superName.equals("android/view/ViewGroup")    //$NON-NLS-1$
                || superName.startsWith("android/widget/")       //$NON-NLS-1$
                && !((superName.endsWith("Adapter")              //$NON-NLS-1$
                        || superName.endsWith("Controller")      //$NON-NLS-1$
                        || superName.endsWith("Service")         //$NON-NLS-1$
                        || superName.endsWith("Provider")        //$NON-NLS-1$
                        || superName.endsWith("Filter")))) {     //$NON-NLS-1$
            return true;
        }

        superName = context.getDriver().getSuperClass(superName);
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

据我所知,我的班级名称与上述模式不符.有谁知道如何修复或抑制此警告?

BaseAdapter中的getView():

@Override
public final View getView(final int position, …
Run Code Online (Sandbox Code Playgroud)

android warnings adapter listadapter android-arrayadapter

9
推荐指数
1
解决办法
5752
查看次数

EasyTracker和常规Tracker有什么区别?

谷歌分析版本3的谷歌文档对于EasyTracker普通Tracker类和普通类之间的差异非常混乱,我真的不确定我应该使用哪一个.在这个页面上,他们讨论了如何设置EasyTracker,使用analytics.xml文件来设置您的ID,然后在下一页上他们讨论设置常规跟踪器并将其传递给您的ID:

// Initialize a tracker using a Google Analytics property ID.
GoogleAnalytics.getInstance(this).getTracker("UA-XXXX-Y")
Run Code Online (Sandbox Code Playgroud)

这两个跟踪器有什么区别?一个人有比另一个更多的功能吗?我认为,EasyTracker如果您只想要活动跟踪,则设置起来会更简单,但如果我想要使用Google Analytics中可用的所有功能,我是否仍然可以使用该功能EasyTracker,或者我是否需要切换到经常Tracker

android google-analytics easytracker

9
推荐指数
1
解决办法
1720
查看次数

support-v4.app.fragment和app.fragment之间的区别?

我是片段新手并且有一个问题:当我更新我的SDK工具并创建一个项目(min = api8,默认值)时,我注意到我的Referenced Library中的android-support-v4.jar.

当我扩展我的类并尝试使用Fragment该类时,我发现有2个.一个是android.app.Fragment,另一个是android.support.v4.app.Fragment.这两者有什么区别?

android

6
推荐指数
1
解决办法
4666
查看次数

由于'java.lang.IllegalAccessError',检测运行失败.Gradle + Espresso

我想用gradle使用espresso测试.为此,我尝试使用杰克沃顿的双浓咖啡,但它不起作用.

我已经读过它可能是重复的依赖项,但是我已经排除了Dagger和Support-v4库,就像Jake在他的自述文件中写的那样.

谁能给我一些关于这里可能出错的建议?

考试类:

package info.korzeniowski.myapp.test;

import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.LargeTest;

import info.korzeniowski.myapp.R;
import info.korzeniowski.myapp.activity.MainActivity_;

import static com.google.android.apps.common.testing.ui.espresso.Espresso.onView;
import static com.google.android.apps.common.testing.ui.espresso.assertion.ViewAssertions.matches;
import static com.google.android.apps.common.testing.ui.espresso.contrib.DrawerActions.closeDrawer;
import static com.google.android.apps.common.testing.ui.espresso.contrib.DrawerActions.openDrawer;
import static com.google.android.apps.common.testing.ui.espresso.contrib.DrawerMatchers.isClosed;
import static com.google.android.apps.common.testing.ui.espresso.contrib.DrawerMatchers.isOpen;
import static com.google.android.apps.common.testing.ui.espresso.matcher.ViewMatchers.withId;

public class BasicTest extends ActivityInstrumentationTestCase2<MainActivity_> {

    public BasicTest() {
        super(MainActivity_.class);
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        getActivity();
    }

    @LargeTest
    public void testOpenAndCloseDrawer() {
        onView(withId(R.id.drawer_layout)).check(matches(isClosed()));

        openDrawer(R.id.drawer_layout);
        onView(withId(R.id.drawer_layout)).check(matches(isOpen()));

        closeDrawer(R.id.drawer_layout);
        onView(withId(R.id.drawer_layout)).check(matches(isClosed()));
    }
}
Run Code Online (Sandbox Code Playgroud)

的build.gradle:

buildscript {
    def androidGradlePluginVersion= '0.9.+'
    def androidAptVersion = '1.2+' …
Run Code Online (Sandbox Code Playgroud)

android android-testing android-gradle-plugin android-espresso

5
推荐指数
1
解决办法
4429
查看次数