小编Adv*_*Dog的帖子

用键盘上方的EditText显示整个底部工作表

我正在实现一个UI,在该UI的底部将在键盘上方显示一个EditText,供用户输入值。问题是视图被键盘部分重叠,覆盖了底部的底部。

这是底表,没有键盘。

底页

这是显示键盘的底部表。

在此处输入图片说明

确保显示整个底表的最佳方法是什么?

谢谢。

android android-layout android-softkeyboard bottom-sheet

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

Android导航架构组件 - 导航抽屉图标

我目前正在使用Android架构组件Navigation,但我遇到了问题Navigation Drawer.它在我的起始目的地显示汉堡包菜单,但其他Fragments显示向上箭头.我相信我的设置navigation_graph不正确.

在这里,您可以看到我的导航抽屉,显示2个项目,主页和设置.在其中任何一个片段中,您应该看到汉堡图标.

导航抽屉

但是,在导航到"设置片段"时,它会显示"向上"箭头.

工具栏

navigation.graph.xml

<?xml version="1.0" encoding="utf-8"?>
<navigation 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"
    app:startDestination="@id/nav_home">

    <!-- Start at HomeFragment -->
    <fragment
        android:id="@+id/nav_home"
        android:name=".HomeFragment"
        android:label="@string/home">

        <!-- Navigate to the Search -->
        <action
            android:id="@+id/action_nav_home_to_nav_search"
            app:destination="@id/nav_search" />
    </fragment>


    <fragment
        android:id="@+id/nav_settings"
        android:name=".SettingsFragment"
        android:label="@string/settings">

        <!-- Navigate to the Search -->
        <action
            android:id="@+id/action_nav_settings_to_nav_search"
            app:destination="@id/nav_search" />
    </fragment>



    <fragment
        android:id="@+id/nav_search"
        android:name=".SearchFragment"
        android:label="@string/search" />

</navigation>
Run Code Online (Sandbox Code Playgroud)

我觉得HomeFragment并且SettingsFragment应该以某种方式相关,但我不确定如何定义它.

main_drawer.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="single">
        <item
            android:id="@id/nav_home"
            android:icon="@drawable/ic_home_white_24dp"
            android:title="@string/home" /> …
Run Code Online (Sandbox Code Playgroud)

android navigation-drawer android-components android-jetpack android-architecture-navigation

14
推荐指数
2
解决办法
5620
查看次数

Android Studio - Android设备监视器 - 空视图

我试图在Android Studio中使用Android设备监视器,但不知怎的,我设法删除所有视图.

我已经尝试重置透视图,Window-> Show View - >(Any View),甚至重新安装Android Studio但没有显示任何内容.

Android设备监视器

有谁知道如何将设备监视器重置为其默认视图?(左侧是设备,右侧是堆/线程/分配视图.)

谢谢你的帮助!

android ddms android-studio

12
推荐指数
1
解决办法
1万
查看次数

Android - ActivityOptionsCompat - 自定义扩展动画

我目前正在试图弄清楚如何制作自定义扩展动画,使用ActivityOptionsCompat似乎是最好的方法; 但是,我不确定如何编写自定义过渡动画来实现我想要的效果.

我在列表"打开"的顶部有一个按钮,按下该按钮会将ListView向下移动,展开并显示带有选项的屏幕.我希望这张图片能解释我想要完成的任务.

展开过渡动画

我想要做的是:

  • 将顶部"打开"栏设置为第二个屏幕"标题"中名为"过滤器"的顶部栏
  • 将直接位于"打开"栏下方的0px高度视图设置为名为"FRAME"的展开选项列表
  • 将ViewPager设置为名为"LIST"的扩展选项下方的0px高度视图

但是List并没有被推开,新的屏幕只是叠加在它上面.

ViewCompat.setTransitionName( filters, "FILTERS" );
ViewCompat.setTransitionName( frame, "FRAME" );
ViewCompat.setTransitionName( viewPager, "LIST" );

ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(
            getActivity(), new Pair<>( filters, "FILTERS" ), new Pair<>( frame, "FRAME" ), new Pair<>( (View)viewPager, "LIST" ) );


ActivityCompat.startActivity( getActivity(), new Intent( getActivity(), Filters.class ),
            options.toBundle() );
Run Code Online (Sandbox Code Playgroud)

有谁知道如何完成这种过渡动画风格?

谢谢你的时间和帮助.

animation android android-appcompat

12
推荐指数
1
解决办法
694
查看次数

Android - 在键盘上方显示BottomSheetDialogFragment

我正在尝试显示一个BottomSheetDialogFragment带有几个EditText字段供用户输入信息.我想直接在键盘上方显示它,但它会不断覆盖内容.

这就是当我提出时BottomSheetDialogFragment,你可以看到它正在选择Card Number EditText,但覆盖其他内容.

BottomSheetDialogFragment覆盖内容

理想情况下,这就是我正在寻找的,你可以看到它们EditTexts和视图的填充.

BottomSheetDialogFragment没有掩盖内容

我已经尝试了很多解决方案windowSoftInputMode,但似乎没有任何效果.我已将其设置adjustResize为父级Activity和实际的BottomSheetDialogFragment通道

dialog.window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)

我也试着改变我的布局,从改变它FrameLayout,到ScrollView一个CoordinatorLayout,看看是否能对布局的地位产生任何影响,但似乎没有任何工作.

如果有人知道如何做到这一点,那将非常感谢,谢谢.

android android-softkeyboard bottom-sheet

12
推荐指数
2
解决办法
2274
查看次数

具有多个不同类型来源的 LiveData

我目前有一个包含MyItem,并使用 Firebase/LiveData的列表的项目。它被组织成组,每个组都有项目。

如果发生以下任何情况,我希望能够更新此列表:

  1. 更新项目(在后端通过 Firebase)
  2. 过滤器已更改(每个用户在 Firebase 上都有一个单独的表格)
  3. 为项目添加了书签(每个用户在 Firebase 上都有一个单独的表格)

为了获取内容列表,我有一个像这样的函数来返回 LiveData,每当一个项目更新(#1)时它就会更新。

数据库

getList(id: String): LiveData<List<MyItem>> {
    val data = MutableLiveData<List<MyItem>>()

    firestore
        .collection("groups")
        .document(id)
        .collection("items")
            .addSnapshotListener { snapshot, exception ->
                val items = snapshot?.toObjects(MyItem::class.java) ?: emptyList()

                // filter items 

                data.postValue(items)
        }

    return data
}
Run Code Online (Sandbox Code Playgroud)

在我的 ViewModel 中,我有处理这种情况的逻辑。

视图模型

private val result = MediatorLiveData<Resource<List<MyItem>>>()

private var source: LiveData<List<MyItem>>? = null
val contents: LiveData<Resource<List<MyItem>>>
    get() {
        val group = database.group

        // if the selected group is changed.
        return Transformations.switchMap(group) …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-livedata google-cloud-firestore mutablelivedata

11
推荐指数
1
解决办法
7695
查看次数

Gson - 将嵌套对象序列化为属性

有没有一种简单的方法来转换嵌套对象如何转换为JSON?我正在尝试创建一个JSON对象来匹配后端.我正在为我的网络使用Retrofit,它使用Gson将Object转换为JSON.

我无法访问网络调用和转换之间的任何代码,所以我试图通过GsonBuilder或Annotations找到一种简洁的方法来修改Object的转换方式.

// Automatically converted to JSON with passed in Gson.
Call<myObject> search( @Body foo myFoo ); 
Run Code Online (Sandbox Code Playgroud)
public class foo {
    String text = "boo";
    bar b = new bar();
}

public class bar {
    String other = "moo";
}
Run Code Online (Sandbox Code Playgroud)

结果:

{ "text": "boo", "b" { "other": "moo" } }
Run Code Online (Sandbox Code Playgroud)

期望的结果:

{ "text": "boo", "other": "moo" }
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.:)

json gson android-json

8
推荐指数
1
解决办法
8002
查看次数

Stripe-Android - 分叉并使用自己的库

我正在集成stripe-android到我的应用程序中,但需要进行一些更改才能使其正确匹配.在这个答案之后,我做了一个叉子并把它作为一个gradle依赖.

链接答案

你可以使用另一种方法来添加github项目的依赖项,使用github repo和jitpack插件在这种情况下你必须添加这个repo tp你的build.gradle

repositories {
     // ...  
     maven { url "https://jitpack.io" }
 } 
Run Code Online (Sandbox Code Playgroud)

和依赖:

dependencies {         
    compile 'com.github.User:Repo:Tag'
}
Run Code Online (Sandbox Code Playgroud)

实施

听起来很容易.所以我创建了一个fork,并进行了我需要的小改动,并按照他们的方案v5.1.1创建了一个新标记.然后我将它添加到我的依赖项中.

dependencies {         
    compile 'com.github.ClickDishes:stripe-android:v5.1.1'
}
Run Code Online (Sandbox Code Playgroud)

所以它能够找到一个版本; 但是,它现在会给我一个错误.

错误:模块'com.github.ClickDishes:stripe-android:v5.1.1'取决于一个或多个Android库但是是一个jar

你可以在这里找到我的标签,https://github.com/ClickDishes/stripe-android/releases/tag/v5.1.1

关于我做错了什么的任何想法?

谢谢.

更新

我一直在研究这个问题,我认为这可能是图书馆设置的一个问题.阅读JitPack上的日志显示了很多关于Android支持类的错误,并且gms.所以我相信它与一些图书馆的搭配并不好.

https://jitpack.io/com/github/ClickDishes/stripe-android/v5.1.1/build.log

  ... 
  symbol:   class LineItem
  location: class CartError
/home/jitpack/build/android-pay/src/main/java/com/stripe/wrap/pay/utils/CartManager.java:9: error: package com.google.android.gms.wallet does not exist
import com.google.android.gms.wallet.Cart;
                                    ^
  ...
Run Code Online (Sandbox Code Playgroud)

然后我将其与stripe:stripe-androidJitPack 上的实际库进行比较,并显示相同的错误.

git android github stripe-payments

7
推荐指数
1
解决办法
198
查看次数

Android - Retrofit 2 - 身份验证器结果

我正在尝试使用Retrofit(2.0.0-beta3),但是当使用Authenticator添加令牌时,我似乎无法从同步调用中获取数据.我们在后端的日志记录只显示了很多登录尝试,但我无法从正文中获取实际添加到标题的数据.

    public static class TokenAuthenticator implements Authenticator {
    @Override
    public Request authenticate(Route route, Response response) throws IOException {
        // Refresh your access_token using a synchronous api request
        UserService userService = createService(UserService.class);

        Call<Session> call = userService.emailLogin(new Credentials("handle", "pass"));

        // This call is made correctly, as it shows up on the back-end.
        Session body = call.execute().body();

        // This line is never hit.
        Logger.d("Session token: " + body.token);

        // Add new header to rejected request and retry it
        return response.request().newBuilder()
                .header("Auth-Token", body.token)
                .build(); …
Run Code Online (Sandbox Code Playgroud)

authentication android retrofit2

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

LibGDX - ImageButton - 设置图像与背景

根据我的理解,ImageButton内部LibGDX是包含图像的框架.是否可以设置框架的背景?

例如,我想使用Button背景,并在该图像的顶部应用一个Icon.

现行守则

皮肤与背景:

"com.badlogic.gdx.scenes.scene2d.ui.ImageButton$ImageButtonStyle": {
    "default": {
        "imageDown": "button-down", 
        "imageUp": "button-up"
    }
}
Run Code Online (Sandbox Code Playgroud)

创建ImageButton:

// Getting imageButtonStyle with "default" style, as it just has the background.
ImageButton.ImageButtonStyle imageButtonStyle = skin.get( "default", ImageButton.ImageButtonStyle.class );
ImageButton button = new ImageButton( imageButtonStyle );
// Set the image on the button to something.
Run Code Online (Sandbox Code Playgroud)

背景图片.

静态背景按钮图像

背景图象覆盖的图标.

静态背景按钮图像与心脏图标 静态背景按钮图像与邮件图标

谢谢您的帮助.

android libgdx

3
推荐指数
1
解决办法
8665
查看次数

minifyEnabled 删除已用资源

我的资产文件夹中有一个目录,其中包含数据库的 json 。

资产/数据库/database_1/locations.json

使用时minifyEnabled true,它会删除这些资产,因为它认为它们没有被使用。

我如何告诉 ProGuard 它们已被使用?

android proguard android-gradle-plugin

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