标签: androidx

TextInputEditText 的 OutlinedBox 不起作用

我正在登录屏幕上工作,我想在其中使用以下视图实现材料编辑文本:

在此处输入图片说明

以下是我的代码:

<com.google.android.material.textfield.TextInputLayout
        android:layout_width="match_parent"
        style="@style/ThemeOverlay.MaterialComponents.TextInputEditText.OutlinedBox"
        android:layout_height="wrap_content">

        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="This is Hint"/>

    </com.google.android.material.textfield.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)

但是 OutlinedBox 没有出现。这是它的外观:

在此处输入图片说明

请帮忙。

android android-edittext material-design android-textinputlayout androidx

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

迁移到 androidx 后错误膨胀类

我迁移到 Androidx,但迁移后,出现以下错误:

 Caused by: android.view.InflateException: Binary XML file line #12: Binary XML file line #2: Error inflating class android.support.design.widget.CoordinatorLayout
 Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class android.support.design.widget.CoordinatorLayout
Run Code Online (Sandbox Code Playgroud)

我研究了所有的资源并迁移到Androidx,但我仍然有很多问题。有人能帮我吗?我将在下面发布代码部分。

---------崩溃的开始---------

2019-01-23 09:47:34.171 17578-17578/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: ir.bijac.com.bijac, PID: 17578
    java.lang.RuntimeException: Unable to start activity ComponentInfo{ir.bijac.com.bijac/ir.bijac.com.bijac.TestActivity}: android.view.InflateException: Binary XML file line #12: Binary XML file line #2: Error inflating class android.support.design.widget.CoordinatorLayout
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at …
Run Code Online (Sandbox Code Playgroud)

android androidx

9
推荐指数
3
解决办法
8162
查看次数

片段随着 ViewPager2 和 FragmentStateAdapter 消失

我正在构建一个应用程序ViewPager2,该应用程序在滑动时显示不同的片段。我的适配器FragmentStateAdapter此处所述进行扩展。

当我将我的应用程序置于后台然后再次恢复时,当前片段消失了。我需要做什么来确保当前片段正确恢复?

(注意:我问的是FragmentStateAdapter,不是FragmentPagerAdapterFragmentStatePagerAdapter。)

更新 1

我的片段类如下:

class PagerFragment : Fragment() {

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    val layoutResId: Int = arguments!!.getInt(ARG_LAYOUT_RES_ID)
    return inflater.inflate(layoutResId, container, false)
}

companion object {
    private const val ARG_LAYOUT_RES_ID = "layoutResId"

    fun newInstance(layoutResId: Int): PagerFragment {
        val args = Bundle()
        args.putInt(ARG_LAYOUT_RES_ID, layoutResId)

        val fragment = PagerFragment()
        fragment.arguments = args
        return fragment
    }
}
Run Code Online (Sandbox Code Playgroud)

}

我在创建每个片段时传入所需的布局资源 ID。

我的视图寻呼机适配器类如下:

class …
Run Code Online (Sandbox Code Playgroud)

android androidx android-viewpager2

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

透明 AppBarLayout

我正在开发一个应用程序,我想要一个透明的工具栏 (AppBarLayout),但仍然可以看到导航图标按钮。不幸的是,我能做到的最好的是透明的工具栏,它仍然会降低阴影(高程)。

我有一个全屏对话框片段,请参阅样式:

<style name="FullScreenImageStyle" parent="AppTheme">
        <item name="android:windowNoTitle">true</item>

        <item name="android:windowFullscreen">false</item>
        <item name="android:windowIsFloating">false</item>


        <item name="android:windowEnterAnimation">@anim/slide_up</item>
        <item name="android:windowExitAnimation">@anim/slide_down</item>
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:windowTranslucentNavigation">true</item>
        <item name="windowActionBarOverlay">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>
Run Code Online (Sandbox Code Playgroud)

片段的布局如下所示(这里只是开头):

<androidx.coordinatorlayout.widget.CoordinatorLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">

    <com.google.android.material.appbar.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/transparent">

        <androidx.appcompat.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>

    </com.google.android.material.appbar.AppBarLayout>
Run Code Online (Sandbox Code Playgroud)

稍后在初始化对话框片段时,我设置了全屏样式和导航图标的资源 ID。

结果看起来像这样。注意工具栏在屏幕顶部的阴影: 在此处输入图片说明

任何想法如何解决这个问题,请?

android material-design androidx

9
推荐指数
3
解决办法
3778
查看次数

androidX jetifier - 有没有办法忽略jetifying .JAR?

尝试将我的应用程序更新为androidX依赖项。按照此处的说明进行操作,编译失败。错误来自JetifyTransform任务无法处理某个 .JAR 依赖项(仅供参考 -三星 Spass SDK):

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:kaptGenerateStubsStandardNo_vendorDebugKotlin'.
> Could not resolve all artifacts for configuration ':app:standardNo_vendorDebugCompileClasspath'.
   > Failed to transform file 'pass-v1.2.2.jar' to match attributes {artifactType=processed-jar} using transform JetifyTransform
      > Failed to transform '/Users/hanandann/StudioProjects/ArnakPaymentsAndroid/Payments/app/libs/pass-v1.2.2.jar' using Jetifier. Reason: null. (Run with --stacktrace for more details.)
   > Failed to transform file 'pass-v1.2.2.jar' to match attributes {artifactType=processed-jar} using transform JetifyTransform
      > …
Run Code Online (Sandbox Code Playgroud)

android androidx android-jetifier

9
推荐指数
2
解决办法
9474
查看次数

在 Android Studio 中迁移到 AndroidX 后出现 YoutubeAndroidPlayerAPI 错误

我有一个带有 YoutubeAndroidPlayerAPI.jar 官方库版本 1.2.2 的 android 原生项目(java),它具有在我的应用程序中嵌入 Youtube Player 的功能。在迁移到 AndroidX 之前一切正常。

我意识到 YoutubeAndroidPlayerAPI 中的代码不支持 AndroidX。扩展到 Fragment 的 YoutubePlayerSupportFragment 类仍然使用 import android.support.v4.app.Fragment 而不是 androidx.fragment.app.Fragment。

i 无法编辑用于迁移到 AndroidX 的 YoutubeAndroidPlayerAPI(只读模式)的代码。

这是我的项目的示例代码,在“setArguments”、“getArguments”和“getActivity”处收到错误和红色警告。

public class FragmentVideoPlayer extends YouTubePlayerSupportFragment implements YouTubePlayer.OnInitializedListener {

private YouTubePlayer player;
public FragmentVideoPlayer() {
    }

public static FragmentVideoPlayer newInstance(final String videoId) {
        final FragmentVideoPlayer youTubeFragment = new FragmentVideoPlayer();
        final Bundle bundle = new Bundle();
        bundle.putString(KEY_VIDEO_ID, videoId);
        youTubeFragment.setArguments(bundle);
        return youTubeFragment;
    }

    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);

        final Bundle arguments …
Run Code Online (Sandbox Code Playgroud)

java android android-fragments android-youtube-api androidx

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

如何使用新的 Android-X API 从当前的 PreferenceFragment 打开一个新的 PreferenceFragment?

背景

在以前版本的支持库中,我们可以使用标题来拥有一个设置的主菜单屏幕,每个屏幕都会打开一个新的设置屏幕(片段)。

问题

现在标题消失了(如这里所写)一段时间,我认为在 android-x 上情况变得更糟:

你会注意到这里没有的一件事是首选项标题,你是完全正确的。然而,这并不意味着单个偏好列表需要跨越 10 英寸平板电脑屏幕。相反,您的 Activity 可以实现 OnPreferenceStartFragmentCallback ( link ) 以使用 app:fragment 属性或 OnPreferenceStartScreenCallback ( link ) 处理首选项以处理 PreferenceScreen 首选项。这允许您在一个窗格中构造“标题”样式 PreferenceFragmentCompat 并使用这些回调替换第二个窗格,而无需在两种不同类型的 XML 文件中工作。

问题是,我没有在新的 android-x API 上使用这些。

每个片段都有自己的首选项 XML 树(使用setPreferencesFromResourceonCreatePreferences),但我提出的每个解决方案要么什么都不做,要么崩溃。

以直观的方式来说,这就是我想要实现的目标:

在此处输入图片说明

由于有多个子设置屏幕,将所有子设置屏幕的所有首选项都放在主设置屏幕的一个 XML 文件中会非常麻烦。

我试过的

我唯一成功的是使用 PreferenceScreen 来保存应该显示的子屏幕的首选项。

这是此类事情的工作代码(可在此处获得项目):

首选项.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:title="Demo">

    <PreferenceScreen
        android:key="screen_preference" android:summary="Shows another screen of preferences"
        android:title="Screen preferenc">

        <CheckBoxPreference
            android:key="next_screen_checkbox_preference"
            android:summary="Preference that is on the next screen but same hierarchy"
            android:title="Toggle preference"/> …
Run Code Online (Sandbox Code Playgroud)

android android-preferences android-fragments preferencefragment androidx

8
推荐指数
2
解决办法
6841
查看次数

尝试模拟 NavController 时出错

尝试按照示例https://developer.android.com/guide/navigation/navigation-testing,我有一个预期的错误

org.mockito.exceptions.base.MockitoException:Mockito 无法模拟此类:类 androidx.navigation.NavController。

即使包含所有依赖项,如下所示: https: //developer.android.com/training/testing/set-up-project

@RunWith(AndroidJUnit4::class)
class MyShopFragmentTest {

    @Test
    fun testMyShopScenario_F001() {
        // Create a mock NavController
        val mockNavController = mock(NavController::class.java)

        // Create a graphical FragmentScenario for the MyShopFragment
        val myShopFragmentScenario = launchFragmentInContainer<MyShopFragment>()

        // Set the NavController property on the fragment
        myShopFragmentScenario.onFragment { fragment ->
            Navigation.setViewNavController(fragment.requireView(), mockNavController)
        }

        // Verify that performing a click prompts the correct Navigation action
        onView(ViewMatchers.withId(R.id.search)).perform(ViewActions.click())
        verify(mockNavController).navigate(R.id.searchFragment)
    }
}
Run Code Online (Sandbox Code Playgroud)

任何想法?

android mockito androidx

8
推荐指数
2
解决办法
2225
查看次数

捕获 Android 媒体按钮事件

我有一个应用程序启动前台服务来播放一些媒体,我希望能够使用智能手表/耳机上的媒体按钮来控制它,并通过媒体样式通知等来控制它。

但我无法让媒体按钮始终如一地工作。在日志中,我可以看到它们经常被发送到其他应用程序,即使我最后启动了 MediaSession 和播放。

但尽管有一个媒体会话,我在其中 setActive(true) 并定义了媒体回调,但我无法让它工作?

显现:

<service
    android:name=".services.MediaControllerService"
    android:enabled="true"
    android:exported="true"
    android:permission="android.permission.FOREGROUND_SERVICE">
    <intent-filter android:priority="999">
        <action android:name="android.intent.action.MEDIA_BUTTON"/>
    </intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)

代码(注意这些包,在 android 10 中很难找到一起工作并给我 MediaStyle 的正确包组合)...

import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.AudioAttributes;
import android.media.AudioFocusRequest;
import android.media.AudioManager;
import android.media.MediaMetadata;
import android.support.v4.media.MediaMetadataCompat;
import android.support.v4.media.session.MediaControllerCompat;
import android.support.v4.media.session.MediaSessionCompat;
import android.support.v4.media.session.PlaybackStateCompat;
import android.view.KeyEvent;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
import androidx.media.session.MediaButtonReceiver;

public class TextToSpeechMediaControllerService extends Service { 
    public static final String START_SERVICE_ACTION_INTENT = "serviceStart";
    private TextToSpeechPlayer player;
    private MediaMetadataCompat mediaMetaData; …
Run Code Online (Sandbox Code Playgroud)

android android-mediaplayer android-mediasession androidx

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

如何在 Android Pie 中使用 Intent.ACTION_OPEN_DOCUMENT

我正在使用 android 馅饼中的 Retrofit 制作个人资料照片更改功能。

这样我就成功地将相机拍摄的照片上传到服务器了。但我不知道如何将从图库中选择的照片传输到我的服务器。(我对 Java Kotlin 中的任何类型的代码都很满意。)

我稍后会上传视频。

我在谷歌上搜索了很多,但很难得到我想要的信息。

谷歌文档做得很好,但我不知道该怎么做。 https://developer.android.com/guide/topics/providers/document-provider

Google 文档显示了使用位图或输入流或其他内容的示例。

我需要位图或输入流才能使用 Retrofit 上传照片吗?

我实际上需要一个有效的 uri。

public void performFileSearch() {
        Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        intent.setType("image/*");
        startActivityForResult(intent, PICTURES_DIR_ACCESS_REQUEST_CODE);
}


@Override
public void onActivityResult(int requestCode, int resultCode,Intent resultData) {
    if (requestCode == READ_REQUEST_CODE && resultCode ==Activity.RESULT_OK) {
        Uri uri = null;
        if (resultData != null) {
            uri = resultData.getData();
            Log.i(TAG, "Uri: " + uri.toString());
            showImage(uri);
        }
    }
}


public void Edit_Profile (String Image_Uri) {
    File file …
Run Code Online (Sandbox Code Playgroud)

java retrofit2 android-9.0-pie androidx android-10.0

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