当前位置: 首页 > news >正文

新网站怎么做微博营销的特点有哪些

新网站怎么做,微博营销的特点有哪些,做网站不会框架,西安seo外包费用先上效果#xff1a; 4个view的文字都是通过DataBinding填充的。交互事件#xff1a;点击图片#xff0c;切换图片 创建项目#xff08;android Studio 2023.3.1#xff09; Build.gradle(:app) 引入依赖库#xff08;完整源码#xff09; buildFeatures { vie…先上效果 4个view的文字都是通过DataBinding填充的。交互事件点击图片切换图片 创建项目android Studio 2023.3.1 Build.gradle(:app) 引入依赖库完整源码 buildFeatures {         viewBinding true         compose true     }     dataBinding {         enabled true     } plugins {alias(libs.plugins.android.application)alias(libs.plugins.jetbrains.kotlin.android)id kotlin-kapt }android {namespace com.example.lanidemoktcompileSdk 31defaultConfig {applicationId com.example.lanidemoktminSdk 24targetSdk 30versionCode 1versionName 1.0testInstrumentationRunner androidx.test.runner.AndroidJUnitRunner}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile(proguard-android-optimize.txt), proguard-rules.pro}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}kotlinOptions {jvmTarget 1.8}lintOptions {abortOnError false}buildFeatures {viewBinding truecompose true}dataBinding {enabled true} }dependencies {implementation org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.2implementation org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.2implementation androidx.compose.ui:ui:1.0.1implementation androidx.appcompat:appcompat:1.4.1implementation androidx.appcompat:appcompat-resources:1.4.1implementation com.google.android.material:material:1.5.0implementation androidx.compose.material:material:1.0.1implementation com.github.bumptech.glide:compiler:4.11.0implementation com.github.bumptech.glide:glide:4.11.0 } 1. 基本使用意向绑定数据显示在界面  MainActivity.kt 完整源码 在MainActivity.kt里Databinding和我们的XML文件绑定起来了现在你点击Databinding会发现直接可以跳转到对应的XML文件里面去了 package com.example.lanidemoktimport android.os.Bundle import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.databinding.BaseObservable import androidx.databinding.DataBindingUtil import com.catchpig.utils.LogUtils import com.example.lanidemokt.adapter.MainActivityBindingAdapter import com.example.lanidemokt.databinding.ActivityMainBinding import com.example.lanidemokt.viewmodel.ButtonClickListener import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch import java.util.Dateclass MainActivity : AppCompatActivity() {/** DataBinding 对应一个Binding对象对象名是布局文件文称加上Binding后缀* binding,activity_main.xml的布局实例* xml上所有变量与点击事件必须是binding的成员属性或者成员方法函数否则操作界面无效** */var binding: ActivityMainBinding? null // 操作布局实例private var login: Login? null //声明一个响应式对象用于uivar clickListener: ButtonClickListener? null // 布局点击对象封装override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState) // setContentView(R.layout.activity_main)binding DataBindingUtil.setContentView(this, R.layout.activity_main)ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -val systemBars insets.getInsets(WindowInsetsCompat.Type.systemBars())v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)insets}initView()initData()corGlobalTest()}private fun initData() {LogUtils.init(this)}/* ** 在Controller层将我们的data与model相关联* */data class Login(var name: String LLL, var msg: String) //意向绑定响应式data class Student(var name: String LLL, var score: Int) : BaseObservable() //双击绑定响应式private fun initView() {binding?.msg?.setText(我是谁)login Login(LANI, 我是谁)// binding?.login Login(LANI, 我是谁)// 这一步必须要否则点击没反应否则界面不显示对应的名字与信息binding?.setLogin(Login(LANI, 我是谁))binding?.setStudent(Student(LEE, 199))binding?.picture1?.setOnClickListener {println(图片点击)MainActivityBindingAdapter.loadStudentDetails(it as ImageView,http://192.168.1.207:8080/download/88.jpg)}clickListenerButtonClickListener()binding?.btnHandler clickListener}/** 协程创建* */fun corGlobalTest() {GlobalScope.launch {println(|--开始global${Date()})delay(1000)println(|--END global${Date()})}println(|--END ${Date()})} } activity_main.xml 现在我们就来看看如何给我们的XML文件里面的View设置值。 在XML文件的layout标签下创建data标签在data标签中再创建variable标签variable标签主要用到的就是name属性和type属性类似于Java语言声明变量时需要为该变量指定类型和名称。新建一个名为Login的数据类。 在XML文件中声明好variable属性后接下来就可以在XML使用它了。 使用variable属性时需要使用到布局表达式 { }。 可以在布局表达式{ }中获取传入variable对象的 activity_main.xml 源码 ?xml version1.0 encodingutf-8? layout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsdatavariablenamelogintypecom.example.lanidemokt.MainActivity.Login /variablenamestudenttypecom.example.lanidemokt.MainActivity.Student //dataandroidx.constraintlayout.widget.ConstraintLayoutandroid:idid/mainandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:context.MainActivityTextViewandroid:idid/msgandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text{login.name}app:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toTopOfparenttools:text名字 /TextViewandroid:idid/msg2android:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text{login.msg}app:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toBottomOfid/msgtools:text消息 /TextViewandroid:idid/msg4android:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text{ student.score}app:layout_constraintBottom_toBottomOfid/loginapp:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toBottomOfid/msg2tools:text消息2 //androidx.constraintlayout.widget.ConstraintLayout /layout 2. 给控件View添加响应事件 方式一直接在Controller层通过原来的方式添加 binding?.login?.setOnClickListener {} 方式二 创建一个工具类在类中定义响应的点击事件 第一步创建点击的工具类 ButtonClickListener.kt 第二步在XML文件中添加工具类 在XML文件中添加响应事件 第三步在XML文件中添加响应事件 android:onClick{btnHandler::click} 第四步在Controller里面进行关联 binding?.btnHandler clickListener activity_main.xml  增加点击事件的完整源码 ?xml version1.0 encodingutf-8? layout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsdata!--需要使用到响应数据类引入data标签中再创建variable标签variable标签主要用到的就是name属性和type属性 类似于Java语言声明变量时需要为该变量指定类型和名称--import typeandroid.view.View /!-- import typecom.example.lanidemokt.MainActivity /--!-- variablenamelogintypecom.example.lanidemokt.MainActivity.Login /--variablenamebtnHandlertypecom.example.lanidemokt.viewmodel.ButtonClickListener /variablenamelogintypecom.example.lanidemokt.MainActivity.Login /variablenamestudenttypecom.example.lanidemokt.MainActivity.Student //dataandroidx.constraintlayout.widget.ConstraintLayoutandroid:idid/mainandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:context.MainActivityTextViewandroid:idid/msgandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text{login.name}app:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toTopOfparenttools:text名字 /TextViewandroid:idid/msg2android:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text{login.msg}app:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toBottomOfid/msgtools:text消息 /TextViewandroid:idid/msg4android:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text{ student.score}app:layout_constraintBottom_toBottomOfid/loginapp:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toBottomOfid/msg2tools:text消息2 /Buttonandroid:idid/loginandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text杀生丸哥哥android:onClick{btnHandler::msgTextClickListener}android:layout_marginBottom20dpapp:layout_constraintBottom_toBottomOfid/picture1app:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toBottomOfid/msg4tools:text消息2 /ImageViewandroid:idid/picture1android:layout_width300dpandroid:layout_height200dpandroid:layout_marginBottom20dpandroid:layout_marginTop20dpapp:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toBottomOfid/loginapp:layout_constraintBottom_toBottomOfparentapp:url{http://192.168.1.207:8080/download/kn.png} //androidx.constraintlayout.widget.ConstraintLayout /layout ButtonClickListener.kt 源码 package com.example.lanidemokt.viewmodelimport android.view.View import android.widget.TextView import com.example.lanidemokt.utils.LogSettingclass ButtonClickListener {/** 界面点击事件封装* */fun msgTextClickListener(view: View) {view.text 杀生丸丸哥哥一直很帅 // view.setText( 杀生丸丸哥哥一直很帅) //Use of setter method instead of property access syntax} } 3. XXXBindingAdapter方法实现响应 使用DataBinding库时DataBinding会针对控件属性生成对应的XXXBindingAdapter类如TextViewBindingAdapter类其对TextView的每个可以使用DataBinding的属性都生成了对应的方法而且每个方法都使用了BindingAdapter注解注解中的参数就是对应View的属性。 自定义BindingAdapter 编写一个处理图片的自定义BindingAdapter类。然后定义一个静态方法主要用于添加 BindingAdapter 注解注解值是 ImageView 控件自定义的属性名如下所示。 MainActivityBindingAdapter.kt 源码 图片资源是部署到本地的Nginx上的 http://192.168.1.207:8080/download/kn.png package com.example.lanidemokt.adapterimport android.util.Log import android.widget.ImageView import androidx.databinding.BindingAdapter import com.bumptech.glide.Glide import com.catchpig.utils.LogUtils import com.example.lanidemokt.utils.LogSettingclass MainActivityBindingAdapter {companion object {val TAG: String MainActivityBindingAdapter/** 通过默认adapter 设置自定app:xxx属性并设置xx属性值实现响应式修改更新** */BindingAdapter(url)JvmStaticfun loadStudentDetails(view: ImageView,url: String http://192.168.1.207:8080/download/kn.png) {Glide.with(view!!).load(url).into(view)}} } 多个参数的话修改BindingAdapter有value BindingAdapter(value [url, placeholder, error])         JvmStatic  4.双向响应绑定输入框 输入数字时消息text同步更新 Build.gradle(:app) 引入依赖库完整源码 增加自动生成BR实体的依赖库  id kotlin-kapt kapt {generateStubs true } kapt androidx.room:room-compiler:2.4.0 plugins {alias(libs.plugins.android.application)alias(libs.plugins.jetbrains.kotlin.android)id kotlin-kapt }android {namespace com.example.lanidemoktcompileSdk 31defaultConfig {applicationId com.example.lanidemoktminSdk 24targetSdk 30versionCode 1versionName 1.0testInstrumentationRunner androidx.test.runner.AndroidJUnitRunner}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile(proguard-android-optimize.txt), proguard-rules.pro}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}kotlinOptions {jvmTarget 1.8}lintOptions {abortOnError false}buildFeatures {viewBinding true // dataBinding truecompose true}dataBinding {enabled true}kapt {generateStubs true} } dependencies {implementation org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.2implementation org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.2implementation androidx.compose.ui:ui:1.0.1implementation androidx.appcompat:appcompat:1.4.1implementation androidx.appcompat:appcompat-resources:1.4.1implementation com.google.android.material:material:1.5.0implementation androidx.compose.material:material:1.0.1implementation com.github.bumptech.glide:compiler:4.11.0implementation com.github.bumptech.glide:glide:4.11.0kapt androidx.room:room-compiler:2.4.0 } MainActivity.kt 源码 增加绑定viewmodel    binding?.order OrderViewModel() // 绑定双向响应实体 package com.example.lanidemoktimport android.os.Bundle import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.databinding.BaseObservable import androidx.databinding.DataBindingUtil import com.catchpig.utils.LogUtils import com.example.lanidemokt.adapter.MainActivityBindingAdapter import com.example.lanidemokt.databinding.ActivityMainBinding import com.example.lanidemokt.viewmodel.ButtonClickListener import com.example.lanidemokt.viewmodel.OrderViewModel import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch import java.util.Dateclass MainActivity : AppCompatActivity() {/** DataBinding 对应一个Binding对象对象名是布局文件文称加上Binding后缀* binding,activity_main.xml的布局实例* xml上所有变量与点击事件必须是binding的成员属性或者成员方法函数否则操作界面无效* 布局取响应式值 -表达式 { }** */var binding: ActivityMainBinding? null // 操作布局实例private var login: Login? null //声明一个响应式对象用于uivar clickListener: ButtonClickListener? null // 布局点击对象封装var vm: OrderViewModel OrderViewModel()override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState) // setContentView(R.layout.activity_main)binding DataBindingUtil.setContentView(this, R.layout.activity_main)ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -val systemBars insets.getInsets(WindowInsetsCompat.Type.systemBars())v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)insets}initView()initData()corGlobalTest()}private fun initData() {LogUtils.init(this)}/* ** 在Controller层将我们的data与model相关联* */data class Login(var name: String LLL, var msg: String) //意向绑定响应式data class Student(var name: String LLL, var score: Int) : BaseObservable() //双击绑定响应式private fun initView() {binding?.msg?.setText(我是谁)login Login(LANI, 我是谁)// binding?.login Login(LANI, 我是谁)// 这一步必须要否则点击没反应否则界面不显示对应的名字与信息binding?.setLogin(Login(LANI, 我是谁))binding?.setStudent(Student(LEE, 199))MainActivityBindingAdapter.loadStudentDetails(binding?.picture1 as ImageView,http://192.168.1.207:8080/download/kn.png)binding?.picture1?.setOnClickListener {println(图片点击)LogUtils.d(图片点击)MainActivityBindingAdapter.loadStudentDetails(it as ImageView,http://192.168.1.207:8080/download/88.jpg)}clickListener ButtonClickListener()binding?.btnHandler clickListener //给控件添加响应事件 :点击事件binding?.order OrderViewModel() // 绑定双向响应实体}/** 协程创建* */fun corGlobalTest() {GlobalScope.launch {println(|--开始global${Date()})delay(1000)println(|--END global${Date()})}println(|--END ${Date()})} } OrderViewModel.kt 源码 实现双向绑定 viewmodel,BaseObservable :普通的数据对象包装成一个可观察的数据对象 package com.example.lanidemokt.viewmodelimport androidx.databinding.BaseObservable import androidx.databinding.Bindable import com.catchpig.utils.LogUtils import com.example.lanidemokt.BRclass OrderViewModel : BaseObservable() {/** 实现双向绑定 viewmodel,* BaseObservable :普通的数据对象包装成一个可观察的数据对象* 当使用name字段发生变更后若想UI自动刷新* 要求方法名必须以get开头并且标记Bindable注解* 注解才会自动在build目录BR类中生成entry* 数据模型继承 BaseObservable* 要求获取数据方法名必须以 get 开头并且标记 Bindable 注解;* 设置数据方法必须以 set 开头然后调用 notify() 函数既可以刷新视图。* BR 类是 BaseObservable 子类中由 Bindable 注解修饰的函数生成* BR 类生成位置在 //app\build\generated\source\kapt\debug\com\example\lanidemokt** */get:Bindablevar orderCount: String? 100set(orderCount) {LogUtils.d(当前orderCount${orderCount})field orderCountnotifyPropertyChanged(BR.orderCount)}}activity_main.xml源码 引入viewmodel: variable nameorder  typecom.example.lanidemokt.viewmodel.OrderViewModel / ?xml version1.0 encodingutf-8? layout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsdataimport typeandroid.view.View /variablenameordertypecom.example.lanidemokt.viewmodel.OrderViewModel /variablenamebtnHandlertypecom.example.lanidemokt.viewmodel.ButtonClickListener /variablenamelogintypecom.example.lanidemokt.MainActivity.Login /variablenamestudenttypecom.example.lanidemokt.MainActivity.Student //dataandroidx.constraintlayout.widget.ConstraintLayoutandroid:idid/mainandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:context.MainActivityButtonandroid:idid/loginandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_marginTop20dpandroid:onClick{btnHandler::msgTextClickListener}android:text杀生丸哥哥app:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toBottomOfid/msg4tools:text杀生丸哥哥 /TextViewandroid:idid/msg5android:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_marginTop20dpandroid:text{ 当前订单数量order.orderCount}app:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toBottomOfid/logintools:text消息2 /!-- 双向响应数据赋值语法 {xx.xx}--EditTextandroid:idid/usernameandroid:layout_width100dpandroid:layout_heightwrap_contentandroid:text{order.orderCount}app:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toBottomOfid/msg5 /!-- XXXBindingAdapter方式设置app:url --ImageViewandroid:idid/picture1android:layout_width300dpandroid:layout_height200dpandroid:layout_marginTop20dpandroid:layout_marginBottom20dpapp:layout_constraintBottom_toBottomOfparentapp:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toBottomOfid/loginapp:url{http://192.168.1.207:8080/download/kn.png} //androidx.constraintlayout.widget.ConstraintLayout /layout 双向响应完结。 -- 设置网络图片在ImageView 打开网络权限 AndroidManifest.xml ?xml version1.0 encodingutf-8? manifest xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:toolshttp://schemas.android.com/toolsuses-permission android:nameandroid.permission.INTERNET/applicationandroid:allowBackuptrueandroid:dataExtractionRulesxml/data_extraction_rulesandroid:fullBackupContentxml/backup_rulesandroid:iconmipmap/ic_launcherandroid:labelstring/app_nameandroid:roundIconmipmap/ic_launcher_roundandroid:supportsRtltrueandroid:networkSecurityConfigxml/network_security_configandroid:themestyle/Theme.LaniDemoKttools:targetApi31activityandroid:name.MainActivityandroid:usesCleartextTraffictrueandroid:exportedtrueintent-filteraction android:nameandroid.intent.action.MAIN /category android:nameandroid.intent.category.LAUNCHER //intent-filter/activity/application/manifest app\src\main\res\xml\network_securit_config.xml ?xml version1.0 encodingutf-8? network-security-configbase-config cleartextTrafficPermittedtrue / /network-security-config
http://www.pierceye.com/news/615668/

相关文章:

  • 广州网站建设工作室招聘文创产品设计分析
  • 产品是做网站seo网站设计费用
  • 公司网站的搭建方案做海报图片的网站
  • 纯文本网站建设小米发布会最新
  • 定制版网站建设费用网站服务器干啥
  • 漂亮的网站是什么建设出来的弄一个小程序要多少钱
  • 房地产网站模板 下载免费空间和域名
  • 通付盾 建设网站公司最新永久地域自动跳转
  • 宁波建网站选哪家好一点wordpress手机全部显示
  • 如何注册属于自己的网站做列表的网站
  • 网站公司seo杭州网站建设模板
  • 网站内链如何布局优化大师下载
  • 如何做网站需求表格清单电影购买网站怎么设计
  • 有口碑的常州网站建设家政公司网站建设方案
  • 用户体验设计师吉林网站seo
  • 便宜营销型网站建设优化建站多网站绑定域名
  • 什么网站教人做3d效果图网站建设电话销售不被挂断
  • 村级网站建设 不断增强免费logo设计图案创意
  • 做网站优化有什么途径什么类型的公司需要做建设网站的
  • 计算机毕设代做网站深圳自适应网站开发
  • 万网主机建设网站流程idc 网站备案
  • 收费用的网站怎么做珠海网站关键词推广
  • 学技巧网站制作网站建设税率多少
  • 高端网站设计平台网页设计模板的网站
  • 万网云服务器网站上线网站开发开票税率
  • 西安高端网站制作公司网站开发需要哪些知识
  • 不错的网站建设公网站建设产品展示型的
  • 泰安住房和城乡建设局网站东莞网站推广哪家好信息
  • 个人网站制作的选题意义简短干净三字公司起名
  • 网站卡密代理怎么做网站建设有关表格