Android开发中遇到问题

一、Android View

1.1 代码中设置layout_behavior

CoordinatorLayout.LayoutParams lp=(CoordinatorLayout.LayoutParams)getAppBarLayout().getLayoutParams();
lp.setBehavior(new AdaptiveBehavior());

1.2 可设置最大高度AdaptiveHeightScrollView

class AdaptiveHeightScrollView @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = 0
) : ScrollView(context, attrs, defStyleAttr) {
    private var mMaxHeight = 0

    init {
        val typedArray = context.obtainStyledAttributes(attrs, R.styleable.AdaptiveHeightScrollView)
        mMaxHeight=typedArray.getLayoutDimension(R.styleable.AdaptiveHeightScrollView_maxHeight, mMaxHeight)
        typedArray.recycle()
    }

    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        var mHeightMeasureSpec=heightMeasureSpec
        if (mMaxHeight>0){
            mHeightMeasureSpec=MeasureSpec.makeMeasureSpec(mMaxHeight,MeasureSpec.AT_MOST)
        }
        super.onMeasure(widthMeasureSpec, mHeightMeasureSpec)
    }
}

android:scrollbars=“vertical” xml中需要设置,不然滚动条不显示

1.3 TextView设置加粗无效

tab_subtitle.getPaint().setFakeBoldText(true);
 //需要加上下面一句代码
 tab_subtitle.postInvalidate();

1.4 Android 编程中当打开DrawerLayout时禁止AppBarLayout+CoordinatorLayout,反之允许滑动

要实现当 DrawerLayout 打开时禁止 AppBarLayout + CoordinatorLayout 滑动,否则允许滑动,可以这么做:

1.4.1 给 DrawerLayout 添加 DrawerListener:
java
DrawerLayout drawerLayout = findViewById(R.id.drawer_layout);
drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
    @Override
    public void onDrawerSlide(View drawerView, float slideOffset) {
        // 当抽屉滑动时,禁止 AppBarLayout 和 CoordinatorLayout 滑动
        appBarLayout.setScrollFlags(0);
        coordinatorLayout.setNestedScrollingEnabled(false);
    }

    @Override
    public void onDrawerOpened(View drawerView) {
        // 当抽屉完全打开时,也禁止滑动
    }

    @Override 
    public void onDrawerClosed(View drawerView) {
        // 当抽屉关闭时,恢复 AppBarLayout 和 CoordinatorLayout 的滑动
        appBarLayout.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL  
                | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
        coordinatorLayout.setNestedScrollingEnabled(true);
    }
});
1.4.2 在 onDrawerSlide、onDrawerOpened 方法中调用:
java
AppBarLayout appBarLayout = findViewById(R.id.app_bar_layout);  
appBarLayout.setScrollFlags(0); 

CoordinatorLayout coordinatorLayout = findViewById(R.id.coordinator_layout);
coordinatorLayout.setNestedScrollingEnabled(false);AppBarLayout 的滑动标志设置为 0 以及调用 CoordinatorLayoutsetNestedScrollingEnabled(false) 方法来禁止其滑动。
1.4.3 在 onDrawerClosed 方法中恢复滑动:
java
appBarLayout.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL  
                | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);  
coordinatorLayout.setNestedScrollingEnabled(true);  

1.4.5 TextView设置粗体后有上下间距,怎么避免呢

TextView设置粗体后出现额外的上下间距,这是因为粗体字体本身的font metrics导致的。为避免这个问题,可以通过以下方式:

  1. 在XML中设置android:includeFontPadding=“false”:
xml
<TextView 
    android:text="粗体文本" 
    android:textStyle="bold"
    android:includeFontPadding="false"/>

这个属性的作用是去除字体内衬边距,将可以避免额外的上下间距。
2. 在Java代码中,手动设置Textview的行高:

java
TextView textView = (TextView) findViewById(R.id.text);
textView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
textView.setLineSpacing(0, 1); // 设置行高为字体高度的1倍

由于粗体字体高度变高,系统自动增加了行高,导致上下间距变大。我们可以手动设置行高为字体高度的1倍,排除系统自动增加的行高,这样可以避免额外间距。
3. 自定义一个不带内衬的粗体字体:
我们可以找一款开源的无衬线字体(如Roboto),从中提取出粗体字体文件,添加到项目中,然后设置这个自定义的粗体字体,这可以完全避免字体内衬带来的上下间距问题。
// 得到字体文件(Roboto-Bold.ttf)

Typeface customBoldTf = Typeface.createFromAsset(getAssets(), "fonts/Roboto-Bold.ttf");  

TextView textView = (TextView) findViewById(R.id.text);  
textView.setTypeface(customBoldTf);

这三种方式可以有效避免TextView设置粗体后出现的上下间距问题。其中第三种方式最为根本和彻底,不需要依赖系统字体,可完全按需定制。但相对也比较繁琐,此情况下前两种简单的方式也已基本足够解决这个小问题。

1.4.6 ConstraintLayout代码中设置约束

 val lp = ConstraintLayout.LayoutParams(
           20,
            20
        )
        lp.leftToLeft=ConstraintLayout.LayoutParams.PARENT_ID
        lp.topToTop=R.id.tv_name
        lp.bottomToBottom=R.id.tv_name
        binding.cvCircle.layoutParams=lp

1.4.7 View.post() 使用

View.post() 原理深入理解

 viewPagerVModel.viewPager.post {
            viewPagerVModel.setCurrentItem(mCurrentSelectPosition)  //设置选中页
        }

1.4.8 CardView设置阴影与底部背景有痕迹,不平滑

如背景为白色

app:cardPreventCornerOverlap="true"
app:cardUseCompatPadding="true"
app:cardBackgroundColor="@color/white"
app:cardCornerRadius="@dimen/dp_5"
app:cardElevation="@dimen/dp_2"                          	  	                                                            

1.4.9 ConstraintLayout 中View组件内容过长超出屏幕问题

 <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/dp_5">

        <TextView
            android:id="@+id/tvLogisticsCompany"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{data.trackInfo.carriers_title}"
            android:textColor="@color/color_666666"
            android:textSize="@dimen/font_14"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:text="EWE全球快递" />

        <TextView
            android:id="@+id/tvWaybillNum"
            android:layout_width="@dimen/dp_0"
            android:layout_height="wrap_content"
            android:layout_marginStart="@dimen/dp_10"
            android:layout_marginEnd="@dimen/dp_10"
            android:text="@{data.trackInfo.track_number}"
            android:textColor="@color/color_333333"
            android:textSize="@dimen/font_14"
            android:maxLines="1"
            android:ellipsize="end"
            app:layout_constraintHorizontal_chainStyle="packed"
            app:layout_constraintHorizontal_bias="0"
            app:layout_constraintWidth_default="wrap"
            app:layout_constraintLeft_toRightOf="@+id/tvLogisticsCompany"
            app:layout_constraintRight_toLeftOf="@+id/tvCopy"
            app:layout_constraintTop_toTopOf="parent"
            tools:text="PJVD00001153200" />

        <TextView
            android:id="@+id/tvCopy"
            android:layout_width="@dimen/dp_38"
            android:layout_height="@dimen/dp_19"
            android:layout_marginEnd="@dimen/dp_10"
            android:bind_visibility_boolean="@{Strings.isNotEmpty(data.trackInfo.track_number)}"
            android:background="@{data.copyBtnBg}"
            android:gravity="center"
            android:onClick="@{()->data.copy()}"
            android:text="@string/str_copy"
            android:textColor="@color/color_666666"
            android:textSize="@dimen/font_11"
            app:layout_constraintLeft_toRightOf="@+id/tvWaybillNum"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:text="复制" />
</androidx.constraintlayout.widget.ConstraintLayout>

在这里插入图片描述
在这里插入图片描述
主要使用以下属性
在这里插入图片描述
android:layout_width=“@dimen/dp_0”
app:layout_constraintHorizontal_chainStyle=“packed”
app:layout_constraintHorizontal_bias=“0”
app:layout_constraintWidth_default=“wrap”

1.5.0 透明背景Dialog样式设置

 <style name="MyDialogStyle" parent="Theme.AppCompat.Light.Dialog">
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowFrame">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
        <item name="android:backgroundDimEnabled">false</item>
    </style>

Window window = loadingDialog.getWindow();
            WindowManager.LayoutParams lp = window.getAttributes();
            lp.width = WindowManager.LayoutParams.MATCH_PARENT;
            lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
            **lp.dimAmount=0f;**
            window.setGravity(Gravity.CENTER);
            window.setAttributes(lp);
            window.setWindowAnimations(R.style.PopWindowAnimStyle);
            **window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);**
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Android开发使用OpenCV进行图像处理是一项常见的任务。OpenCV是一个开源的计算机视觉库,它提供了许多强大的图像处理和计算机视觉算法。 要找到OpenCV的文手册,可以在互联网上搜索OpenCV的官方网站,他们提供了许多文档和教程,其包括了文的版本。在OpenCV的官方网站上,你可以找到适用于Android开发文手册,其包含了关于如何使用OpenCV库的详细说明和示例代码。 另外,你还可以在国内的一些技术论坛或博客上寻找文的OpenCV教程。这些资源通常由熟悉OpenCV和Android开发者撰写,并提供了一些实际项目的案例和指导。 此外,文社区还有一些开发者编写的OpenCV相关书籍或教程。这些资源通常是基于他们对OpenCV的经验和研究编写的,提供了更深入、系统的学习资料。你可以在互联网上搜索这些书籍或教程,并根据自己的需求进行选择。 总之,在Android开发使用OpenCV可以帮助开发者实现许多图像处理和计算机视觉的功能。通过寻找适合自己的文教程和手册,可以更好地理解和应用OpenCV的功能和技术。 ### 回答2: Android开发OpenCV文手册是一本专门针对在Android平台上使用OpenCV进行图像处理和计算机视觉开发的指南。OpenCV是一个广泛使用的开源计算机视觉库,它提供了一系列丰富的功能和工具,用于处理图像和视频数据。 这本手册首先介绍了Android开发环境的搭建,包括Java开发环境的安装、Android Studio的配置和OpenCV库的导入。然后,手册详细说明了OpenCV在Android开发的基本用法,包括图像的读取和显示、图像处理的常用算法、图像特征提取和匹配、目标检测和跟踪等。 手册的内容丰富全面,结构清晰,每个主题都有详细的代码示例和实践案例。同时,手册也提供了一些实用的技巧和注意事项,帮助开发者更好地理解和使用OpenCV库。此外,手册还介绍了一些常见的问题和解决方案,以帮助开发者解决在实际开发可能遇到的困难。 对于想要学习Android图像处理和计算机视觉的开发者来说,这本文手册是一个宝贵的参考资料。它不仅提供了对OpenCV库的详细介绍,还将其与Android开发环境结合起来,使开发者能够更加方便地进行图像处理和计算机视觉的开发工作。 总之,Android开发OpenCV文手册是一本很有价值的指南,它能够帮助开发者快速入门和掌握在Android平台上使用OpenCV进行图像处理和计算机视觉开发的技巧和方法。 ### 回答3: OpenCV(开源计算机视觉库)是一个功能强大且广泛使用的开源库,用于处理图像和视频的计算机视觉任务。它提供了许多基本的图像处理和计算机视觉算法,可以在Android开发进行视觉处理。 对于想要开发Android应用程序并集成OpenCV的人来说,Opencv文手册将是一个非常有用的资源。Opencv文手册提供了关于OpenCV库各种函数和方法的详细说明,以及它们如何在Android平台上使用的指导。 Opencv文手册提供了适用于Android的特定指南,例如如何在项目配置OpenCV库,如何导入OpenCV模块,以及如何使用OpenCV函数和方法进行图像处理。手册还提供了使用OpenCV进行基本图像处理的示例代码,例如图像的灰度化、旋转、裁剪等。 此外,Opencv文手册还涵盖了计算机视觉算法的基本原理和应用。这些算法包括图像特征提取、目标检测和跟踪、人脸识别等。手册提供了这些算法的详细说明和示例代码,使开发人员能够理解和应用这些强大的视觉算法。 总之,Opencv文手册对于想要在Android开发集成OpenCV并进行图像处理和计算机视觉任务的开发人员来说,将是一个非常有用的资源。它提供了完整的文档和示例代码,帮助开发人员学习和使用OpenCV库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值