我正在登录屏幕上工作,我想在其中使用以下视图实现材料编辑文本:
以下是我的代码:
<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
我迁移到 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) 我正在构建一个应用程序ViewPager2,该应用程序在滑动时显示不同的片段。我的适配器FragmentStateAdapter按此处所述进行扩展。
当我将我的应用程序置于后台然后再次恢复时,当前片段消失了。我需要做什么来确保当前片段正确恢复?
(注意:我问的是FragmentStateAdapter,不是FragmentPagerAdapter或FragmentStatePagerAdapter。)
更新 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) 我正在开发一个应用程序,我想要一个透明的工具栏 (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。
任何想法如何解决这个问题,请?
尝试将我的应用程序更新为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) 我有一个带有 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) 在以前版本的支持库中,我们可以使用标题来拥有一个设置的主菜单屏幕,每个屏幕都会打开一个新的设置屏幕(片段)。
现在标题消失了(如这里所写)一段时间,我认为在 android-x 上情况变得更糟:
你会注意到这里没有的一件事是首选项标题,你是完全正确的。然而,这并不意味着单个偏好列表需要跨越 10 英寸平板电脑屏幕。相反,您的 Activity 可以实现 OnPreferenceStartFragmentCallback ( link ) 以使用 app:fragment 属性或 OnPreferenceStartScreenCallback ( link ) 处理首选项以处理 PreferenceScreen 首选项。这允许您在一个窗格中构造“标题”样式 PreferenceFragmentCompat 并使用这些回调替换第二个窗格,而无需在两种不同类型的 XML 文件中工作。
问题是,我没有在新的 android-x API 上使用这些。
每个片段都有自己的首选项 XML 树(使用setPreferencesFromResource内onCreatePreferences),但我提出的每个解决方案要么什么都不做,要么崩溃。
以直观的方式来说,这就是我想要实现的目标:
由于有多个子设置屏幕,将所有子设置屏幕的所有首选项都放在主设置屏幕的一个 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
尝试按照示例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)
任何想法?
我有一个应用程序启动前台服务来播放一些媒体,我希望能够使用智能手表/耳机上的媒体按钮来控制它,并通过媒体样式通知等来控制它。
但我无法让媒体按钮始终如一地工作。在日志中,我可以看到它们经常被发送到其他应用程序,即使我最后启动了 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 馅饼中的 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)