Android开发中关于Ui的语法糖

一、layout_margin和padding

android:layout_margin=“10dp”,android:padding="10dp"区别

  1. android:layout_margin="10dp"

    • 适用对象:用于调整 View 与其父容器或相邻 View 之间的距离,即外边距(margin)。
    • 效果:设置该属性后,View 与其父容器或相邻 View 之间会产生一定的间隔,增加 View 之间的距离。
  2. android:padding="10dp"

    • 适用对象:用于控制 View 内部内容与 View 边界之间的距离,即内边距(padding)。
    • 效果:设置该属性后,View 内部内容(如 TextView 中的文本、ImageView 中的图片等)与 View 边界之间会产生一定的间隔,从而使 View 内部的内容离边界有一定距离。
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="@color/blue">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World"
            android:padding="10dp"
            android:background="@color/orange" />
    LinearLayout>
    

二、android:visibility可见与不可见

所有的Android控件都具有这个属性,可以通过android:visibility 进行指定,可选值有3种:visibleinvisiblegone

visible表示控件是可见的,这个值是默认值,不指定android:visibility时,控件都是可见的。

invisbale 表示控件不可见,但是它仍然占据着原来的位置和大小,可以理解成控件变成透明状态了。

gone 则表示控件不仅不可见,而且不再占用任何屏幕空间。

我们还可以通过代码来设置控件的可见性,使用的是setVisibility()方法,可以传入View.VISIBLEView.INVISIBLEView.G0NE这3种值。

三、android:ellipsize文本的缩略方式

当文本超出控件的宽度时,文本的缩略方式。

android:ellipsize属性可以设置以下几种值:

  1. none: 默认值,不做省略处理,当文本超过TextView的宽度时,会自动换行显示文本。
  2. start: 在文本的开头处进行省略,保留文本的末尾部分。
  3. middle: 在文本的中间处进行省略,保留文本的开头和末尾部分。
  4. end: 在文本的末尾处进行省略,默认情况下,超过TextView宽度的文本会在末尾处用省略号表示。
  5. marquee: 当文本过长时,使用水平滚动来显示文本,类似于跑马灯效果。需要设置android:singleLine="true"android:scrollHorizontally="true"属性。文本将以水平滚动的方式显示,并且会不断滚动直到文本完全展示或用户将焦点移出TextView。

四、onActivityCreated弃用后的替代方案

谷歌为了管理Fragment的生命周期,实现了 LifecycleOwner,暴露了一个Lifecycle你可以通过getLifecycle() 方法访问的对象 。

​ 因为onActivityCreated()是宿主Activity的onCreate()之后立即调用,所以可以在onAttach的时候,通过订阅Activitylifecycle来获取ActivityonCreate()事件,记得要removeObserver

现在,官方推荐使用Fragment#onViewCreated()方法来替代onActivityCreated()onViewCreated()方法在Fragment的视图层次结构被创建后立即调用,通常用于初始化Fragment的UI元素和执行与UI相关的逻辑。在onViewCreated()方法中,你可以安全地进行与视图相关的操作,而无需担心Activity的创建状态。

例如:

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        if(getActivity().findViewById(R.id.news_context_layout) !=null){
            isTwoPane = true; //双页模式
        }else{
            isTwoPane = false; //单页模式
        }
    }

替换为;

@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
    super.onViewStateRestored(savedInstanceState);
    if(getActivity().findViewById(R.id.news_context_layout) !=null){
        isTwoPane = true; //双页模式
    }else{
        isTwoPane = false; //单页模式
    }
}

四、requireActivity在Fragment中与之关联的 Activity

requireActivity()

  • 这是 Fragment 中的一个方法,用于获取与当前 Fragment 关联的 Activity 实例。
  • 在 Fragment 中,可以通过 requireActivity() 方法来获取与之关联的 Activity,而无需担心 Activity 是否为 null。这个方法会确保在 Fragment 的生命周期内获取有效的 Activity 实例。
NewsContentFragment newsContentFragment = (NewsContentFragment) requireActivity().getSupportFragmentManager().findFragmentById(R.id.news_context_fragment);

五、设置输入框光标位置setSelection

str = "123"
editText.setSelection(str.lenth());

editText.setSelection(str.length());: 这将设置文本输入框中的光标位置。在这里,光标将被放置在文本的末尾,即最后一个字符之后。

六、修改图片大小

1、设置属性android:scaleType

android:scaleType值的意义区别:

  • CENTERcenter: 图片大小不变,居中显示,当图片长/宽超过View的长/宽,截取图片居中部分显示。
  • CENTER_CROPcenterCrop: 按比例扩大图片的size居中显示,使得图片长(宽)大于等于View的长(宽)。
  • CENTER_INSIDEcenterInside: 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽。
  • FIT_CENTERfitCenter: 按比例缩放图片到视图的最小边,居中显示。
  • FIT_ENDfitEnd: 按比例缩放图片到视图的最小边,显示在视图的下部分位置。
  • FIT_STARTfitStart: 把图片按比例缩放到视图的最小边,显示在视图的上部分位置。
  • FIT_XYfitXY: 把图片不按比例缩放到View的大小显示。
  • MATRIXmatrix: 用矩阵来绘制。

五、限制或者指定输入内容

android:inputType是一个用于控制EditText输入类型的属性。它定义了用户在EditText中可以输入的内容类型,以及输入时的键盘布局和行为。android:inputType的值可以是一个或多个常量的组合,用逗号分隔。

除了"text"之外,还有其他一些可能的android:inputType值,用于限制输入的内容类型,例如:

  • textPassword: 输入密码,文本将被遮蔽以保护隐私。
  • number: 输入数字。
  • phone: 输入电话号码。
  • emailAddress: 输入电子邮件地址。
  • date: 输入日期。
  • 等等…

你可能感兴趣的:(Android,android,ui)