NavigationLink隐藏右侧小箭头
在使用 NavigationLink的时候发现,默认右侧会带上一个小箭头 解决办法: NavigationView { List(landmarkData) { landmark in ZStack{ LandmarkRow(landmark: landmark) NavigationLink(destination: LandmarkDetail(landmark: landmark)) { EmptyView() } } } .navigationBarTitle(Text("Landmarks"))}
Jetpack --(四)ViewBinding
Jetpack–(四) ViewBinding优化封装基类BaseActivity封装abstract class BaseActivity<T: ViewBinding>: AppCompatActivity(){ lateinit var binding: T override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) { super.onCreate(savedInstanceState, persistentState) binding = getViewBinding() setContentView(binding.root) initWidgets() initData() } open fun initWidgets(){} open fun initData(){} ...
Jetpack -- (二)ViewModel
ViewModel的诞生: 瞬态数据丢失 异步调用的内存泄漏 类膨胀提高维护难度和测试难度 添加依赖 implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1' 不要向ViewModel中传入Context,会导致内存泄漏 如果要使用Context,请使用AndroidViewModel中的Application 简单应用: class MyViewModel: ViewModel() { var num:Int = 0} class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding private lateinit var viewModel: MyViewModel override fun onCreate(savedInstanceState: Bundle?) { ...
Jetpack -- (三)LiveData
简单使用场景: 定时修改 textView的值 class TextViewModel: ViewModel() { private val _currentSecond = MutableLiveData<Int>() val currentSecond: MutableLiveData<Int> get() = _currentSecond init { _currentSecond.value = 0 } fun addSecond(){ _currentSecond.postValue(_currentSecond.value?.plus(1)) }} class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding private lateinit var...
Jetpack -- (一)Lifecycle
使用Lifecycle解耦页面与组件场景: Chronometer统计页面在前台时间使用Lifecycle之前: private lateinit var binding: ActivityMainBinding private var elapsedTime:Long = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) } override fun onResume() { super.onResume() binding.chronometer.apply { base =...
Android自定义View-04 属性动画进阶
属性动画进阶4.1 PropertyValuesHolder与Keyframe4.1.1 PropertyValuesHolderPropertyValuesHolder的含义就是,它其中保存了动画过程中所需要操作的属性和对应的值。
Android自定义View-03 属性动画
属性动画视图动画仅能对指定的控件做动画,而属性动画是通过改变空间的某一属性值来做动画的 补间动画虽然能够对控件做动画,但是并没有改变控件内部的属性值。 3.1简单实现ValueAnimator valueAnimator = ValueAnimator.ofInt(0,400);valueAnimator.setDuration(1000L);//添加监听事件valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animator) { int curValue = (int) animator.getAnimatedValue(); //通过更改控件left、top、right、bottom这四个点的坐标来更改坐标位置 //textView将从屏幕左上角点(0,0)运行到点(400,400) ...
Android自定义View-02 视图动画
动画类型View Animation(视图动画) Tween Animation(补间动画) Frame Animation(逐帧动画) Property Animation(属性动画) ValueAnimator ObjectAnimator 一. 视图动画标签1.概述Android动画由5种类型组成:alpha、scale、translate、rotate、set 1.1配置XML动画文件常用标签: alpha:渐变透明度动画 scale:渐变尺寸伸缩动画 translate:画面变换位置移动动画 rotate:画面转移旋转动画 set:定义动画集 <?xml version="1.0" encoding="utf-8"?><scale xmlns:android="http://schemas.android.com/apk/res/android" android:fromXScale="0.0" ...
Android自定义View-01 绘图基础
基本图形绘制 Paint 画笔,设置 画笔大小、粗细、画笔颜色、透明度、字体等样式 Canvas 画布,画出成品的东西,如圆形、矩形、文字等。 Paint基础使用: import android.annotation.SuppressLintimport android.content.Contextimport android.graphics.Canvasimport android.graphics.Colorimport android.graphics.Paintimport android.util.AttributeSetimport android.view.Viewclass BasicView: View { constructor(context: Context): super(context) constructor(context: Context, atts: AttributeSet): super(context,atts) constructor(context: Context, atts:...
2020-07-14-iOS本地化(Swift)
1. 项目配置 如下图为项目添加不同语种 弹框中显示要为显示的文件添加语种信息 添加完多语种后,相关需要本地化的文件会产生一组文件 实际在目录结构中是根据不同语言生成不同的*.lproj目录,再在*.lproj目录中生成了不同的.strings文件。 2. 应用名称本地化 新建一个.strings文件,名为InfoPlist.strings。