我一直在将新的(ish)材质 BottomAppBar 与标准的底部导航视图相结合。我的xml是这样的:
<com.google.android.material.bottomappbar.BottomAppBar
android:id="@+id/bottom_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp"
app:fabAlignmentMode="center">
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:background="@android:color/transparent"
app:itemTextAppearanceActive="@style/AppTheme.Text.BottomNavText.Active"
app:itemTextAppearanceInactive="@style/AppTheme.Text.BottomNavText"
app:labelVisibilityMode="labeled"
app:menu="@menu/bottom_nav_menu" />
</com.google.android.material.bottomappbar.BottomAppBar>
Run Code Online (Sandbox Code Playgroud)
在以前的版本 - 1.0.0 - 这工作正常,我仍然可以按预期看到 FAB 插图。唯一的小缺点是这个版本的材质组件库没有对底部应用栏的高度效果进行排序,所以栏和上面的内容之间的区别并不明确。
当我升级到最新的库(在撰写本文时我相信是)时implementation 'com.google.android.material:material:1.1.0-alpha09',我得到了 BottomAppBar 的高度效果,但是当我将透明背景应用到 BottomNavigationView 时,我得到了一个非常奇怪的视觉效果,对于我的生活我不能理解。
如果我删除透明背景颜色,那么效果会消失,但我会丢失 FAB 插图,如下所示:
如果我完全删除底部导航视图子项,并且只有底部应用栏,我会看到正常的视觉效果,但没有我的导航:
我会喜欢: - 一个很好的解决方案,将底部导航视图合并到 BottomAppBar 中,同时保留 1.1.0 版库的良好提升效果,并且在其中有效地包含 BottomNavigationView,因此我保留了该导航组件的所有优点 - 或解释到底是什么导致了这种奇特的第一次海拔效应,理想情况下是一种修复它的方法
android material-design bottomnavigationview material-components bottomappbar
在将 Android Studio 更新到最新版本后尝试构建项目时,出现此错误。我收到以下错误:
C:\Users\YaCn.gradle\caches\transforms-2\files-2.1\5502c0022567bdcff063e0fb4352b137\folioreader-0.3.3\res\layout\progress_dialog.xml:10: AAPT: 错误/资源栏:androidprogressattr成立。
那个 XML :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout android:id="@+id/layout_loading"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:gravity="center">
<ProgressBar android:id="@+id/loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="?android:attr/android:progressBarStyle"/>
<TextView android:id="@+id/label_loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textSize="18sp"
android:textColor="@android:color/white"
android:text="@string/loading"/>
</LinearLayout>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
构建gradle文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.example.admin.hashtab"
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName "1.0"
multiDexEnabled true
manifestPlaceholders = [manifestApplicationId : "${applicationId}",
onesignal_app_id : "654bcb8c-90a6-4012-924a-e18e5787a7de",
onesignal_google_project_number: "3520309722"]
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles …Run Code Online (Sandbox Code Playgroud) 我正在使用 MVVM 模式创建一个应用程序。我使用导航图来管理应用程序中的片段,根据推荐的方法,我们不必将 UI 逻辑放在Activity/Fragments中,而是放在Viewmodel中。
所以我的问题是如何从一个片段导航到另一个片段。我知道这可以直接在片段内部完成,navController.navigate(R.id.action_here)但是我将如何在按下按钮时处理 ViewModel 的导航?
我的代码:
IntroViewModel.kt
class IntroViewModel : ViewModel() {
fun onBtn1Pressed(view: View) {
Log.d(IntroViewModel::class.java.simpleName, ": onBtn1Pressed")
}
fun onBtn2Pressed(view: View) {
Log.d(IntroViewModel::class.java.simpleName, ": onBtn2Pressed ")
}
}
Run Code Online (Sandbox Code Playgroud)
IntroFragment.kt:
class IntroFragment : Fragment() {
private lateinit var viewModel: IntroViewModel
private lateinit var navController: NavController
lateinit var introBinding: IntroFragmentBinding
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
introBinding = DataBindingUtil.inflate(inflater, R.layout.intro_fragment, container, false)
viewModel = ViewModelProviders.of(this).get(IntroViewModel::class.java) …Run Code Online (Sandbox Code Playgroud) 我目前正在和BottomNavigationView和一起工作FloatingActionButton。我要实现的是以下设计:
而我尝试了:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_insetEdge="bottom"
tools:context=".activity.BottomNavPrimary">
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center|bottom" />
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottomNavPrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:layout_insetEdge="bottom"
android:background="?android:attr/windowBackground"
app:menu="@menu/bottom_nav_primary"></android.support.design.widget.BottomNavigationView>
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud) android android-layout floating-action-button android-coordinatorlayout bottomnavigationview
如何在android中获取材质按钮?我已经尝试过此代码,但是不知道如何包含这样的图像:
<com.google.android.material.button.MaterialButton
android:id="@+id/material_button"
style="@style/Widget.MaterialComponents.Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add to Cart"/>
Run Code Online (Sandbox Code Playgroud)
我试图以Map格式从firebase数据库中检索数据,但我得到一个空指针异常.我已成功使用map将数据插入到我的firebase数据库中.
这是我的代码:
public class Chat extends AppCompatActivity {
DatabaseReference databaseReference1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
Firebase.setAndroidContext(this);
databaseReference1 = FirebaseDatabase.getInstance().getReferenceFromUrl("URL");
databaseReference1.addChildEventListener(new com.google.firebase.database.ChildEventListener() {
@Override
public void onChildAdded(com.google.firebase.database.DataSnapshot dataSnapshot, String s) {
Map map = (Map) dataSnapshot.getValue();
String message = map.get("text").toString(); //ERROR GOES HERE!!
String userName = map.get("Username").toString();
}
@Override
public void onChildChanged(com.google.firebase.database.DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(com.google.firebase.database.DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(com.google.firebase.database.DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) …Run Code Online (Sandbox Code Playgroud) 我在 ConstraintLayout 中有一个滚动视图。但滚动视图在 ConstraintLayout 中不起作用。我尝试使用 NestedScrollView 而不是 ScrollView,但它仍然不起作用。ScrollView 在 LinearLayout 或relativelayout 中工作得很好,但在 ConstraintLayout 中不起作用。我将 android:layout_height 更改为 match_parent 和 wrap_content 但它不起作用。问题是什么?
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
>
<include
android:id="@+id/other_toolbar_xml"
layout="@layout/other_toolbar_xml"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
/>
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@id/other_toolbar_xml"
android:fillViewport="true"
tools:ignore="MissingConstraints"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<ImageView
android:id="@+id/img_content_xml"
android:layout_width="match_parent"
android:layout_height="170dp"
app:layout_constraintTop_toBottomOf="@id/other_toolbar_xml"
android:scaleType="fitXY"
tools:ignore="NotSibling"
/>
<TextView
android:id="@+id/title_content_xml"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/img_content_xml"
android:layout_marginRight="16dp"
android:paddingLeft="16dp"
android:textDirection="rtl"
android:text="title"
android:textSize="17sp"
android:textColor="#1d1d1d"
/>
<TextView
android:id="@+id/content_content_xml"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/title_content_xml"
android:layout_marginTop="20dp"
android:layout_marginRight="16dp"
android:layout_marginEnd="16dp"
android:paddingLeft="16dp"
android:textDirection="rtl"
android:text="content"
android:textColor="#1d1d1d"
/> …Run Code Online (Sandbox Code Playgroud) 我已经在我的 Android 应用程序中实现了应用程序内订阅并按照说明进行操作:
我已经添加了一个email作为许可证测试器,它存在于我的设备(release build)中。
但它不显示测试卡,而是显示真卡。
我还上传了我的应用程序的发布版本,Internal test track但结果与上面相同。
谁能告诉我我做错了什么?
为了在 Android 应用程序中使用,我基本上是为&viewbinding创建基类,以删除每次编写膨胀代码的样板。ActivityFragment
活动:
BaseActivity和viewbinding:
abstract class BaseActivity<VB : ViewBinding> : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = getViewBinding()
}
abstract fun getViewBinding(): VB
}
Run Code Online (Sandbox Code Playgroud)
MainActivity:
class MainActivity : BaseActivity<ActivityMainBinding>() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
//we can directly use binding now and it works fine inside activity
//binding.view.doSomething()
}
override fun getViewBinding(): ActivityMainBinding = ActivityMainBinding.inflate(layoutInflater)
}
Run Code Online (Sandbox Code Playgroud)
片段:
BaseFragment:
abstract class BaseFragment<VB : ViewBinding> : …Run Code Online (Sandbox Code Playgroud) I need to make a little white line under my every recycler view item (from left to right corner), not for any particular element in that item, but for the whole item. (that way it's easier for a user to see which elements are in this particular item, and where another item starts)
Here is my item layout:
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView 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="wrap_content"
android:layout_marginTop="@dimen/_5sdp"
app:cardCornerRadius="0dp"
app:cardElevation="0dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimaryDark">
<TextView
android:id="@+id/nameView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Mike"
android:textColor="@color/colorAccent"
android:textSize="@dimen/_21sdp" …Run Code Online (Sandbox Code Playgroud) android ×10
android-mvvm ×2
kotlin ×2
android-xml ×1
bottomappbar ×1
firebase ×1
flutter ×1
google-play ×1
view ×1
xml ×1