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(){} a ...
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?) { super ...
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 viewMod ...
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 = SystemClock.elapsedRealtime() ...
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) textV ...
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:toXScale="1.4" ...
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: AttributeSet, ...
2020-07-14-iOS本地化(Swift)
1. 项目配置
如下图为项目添加不同语种
弹框中显示要为显示的文件添加语种信息
添加完多语种后,相关需要本地化的文件会产生一组文件
实际在目录结构中是根据不同语言生成不同的*.lproj目录,再在*.lproj目录中生成了不同的.strings文件。
2. 应用名称本地化
新建一个.strings文件,名为InfoPlist.strings。