中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

這幾年做哪些網(wǎng)站能致富站內(nèi)推廣的方法

這幾年做哪些網(wǎng)站能致富,站內(nèi)推廣的方法,怎么做PayPal網(wǎng)站收款,怎么看網(wǎng)站是不是用凡客做的Jetpack Compose 是用于構(gòu)建原生 Android 界面的新工具包,無需修改任何 XML 布局,也不需要使用布局編輯器。相反,只需調(diào)用可組合函數(shù)來定義所需的元素,Compose 編譯器即會完成后面的所有工作。 簡而言之,使用Compose&…

Jetpack Compose 是用于構(gòu)建原生 Android 界面的新工具包,無需修改任何 XML 布局,也不需要使用布局編輯器。相反,只需調(diào)用可組合函數(shù)來定義所需的元素,Compose 編譯器即會完成后面的所有工作。

簡而言之,使用Compose,不再需要xml編寫頁面。


可組合函數(shù)(Composable function)

Compose是圍繞可組合函數(shù)構(gòu)建的,只需要描述應(yīng)用界面的外觀并提供數(shù)據(jù)依賴,而不必關(guān)注界面的構(gòu)建過程(如初始化元素、將其附加到父項等)。而創(chuàng)建Composable function,只需要添加注解@Composable到函數(shù)名稱前。

首先,我們構(gòu)建創(chuàng)建一個應(yīng)用:ComposeTutorial。在AS中選擇Empty Activity創(chuàng)建。

添加文本元素

class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {//在此處定義布局//此處的Text方法是由Compose界面庫定義的文本Composable functionText("Hello world!")}}
}

setContent塊定義了activity的布局,在此處我們添加了Text即“Hello World!”。

自定義可組合函數(shù)

如果需要將一個函數(shù)轉(zhuǎn)換為Composable function,我們需要添加注解“@Composable”。

修改MainActivity:

class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {MessageCard("Android")//使用我們自定義的Composable function}}
}@Composable//添加注解,使該函數(shù)成為Composable function
fun MessageCard(name: String) {Text(text = "Hello $name!")
}

在AS中預(yù)覽Composable function

借助@Preview注解,可以在AS中預(yù)覽Composable function,無需安裝到設(shè)備或虛擬器中。

唯一要求是該注解不能用于接收參數(shù)的函數(shù)中,因此在MainActivity新增如下函數(shù):

@Preview
@Composable
fun PreviewMessageCard() {MessageCard("Android")
}

在重新構(gòu)建后,該函數(shù)沒有被調(diào)用,應(yīng)用本身不會改變,但是AS對于所有添加了@Preview注解的界面元素可以進行預(yù)覽,點擊如下兩個按鈕之一即可:


布局(Layout)

在此處我們實現(xiàn)一個簡單的聊天界面,顯示發(fā)送者和消息內(nèi)容,點擊消息時可縮放。

添加多個文本

class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {//向Composable function中傳入發(fā)送者名稱和消息內(nèi)容 MessageCard(Message("Android", "Jetpack Compose"))}}
}//新建一個Message類,包含消息發(fā)送者和消息內(nèi)容
data class Message(val author: String, val body: String)@Composable
fun MessageCard(msg: Message) {Text(text = msg.author)Text(text = msg.body)
}@Preview
@Composable
fun PreviewMessageCard() {MessageCard(msg = Message("Lexi", "Hey, take a look at Jetpack Compose, it's great!"))
}

這段代碼會在內(nèi)容視圖中創(chuàng)建兩個文本元素。不過,由于未提供有關(guān)如何排列這兩個文本元素的信息,因此它們會相互重疊,使文本無法閱讀。

使用Column、Row、Box

Column,直譯為“圓柱體、長列”。

使用該函數(shù)修改MessageCard,可以垂直排列元素,使其不再重疊文本。

@Composable
fun MessageCard(msg: Message) {Column {Text(text = msg.author)Text(text = msg.body)}
}

同樣的,可以使用Row函數(shù)水平排列元素,而使用Box函數(shù)可以堆疊元素。

添加圖片元素

使用Resource Manager從照片庫中導(dǎo)入圖片,修改MessageCard:

@Composable
fun MessageCard(msg: Message) {//使用Row方法,水平排列圖片和消息Row {Image(painter = painterResource(R.drawable.profile_picture),contentDescription = "Contact profile picture",)Column {Text(text = msg.author)Text(text = msg.body)}}}

配置布局(Modifier)

使用修飾符(Modifier)實現(xiàn)。

Compose中的每一個組件都具有Modifier屬性,通過他我們可以設(shè)置組件的大小、間距、外觀,甚至添加互動事件,如點擊、觸摸事件。

@Composable
fun MessageCard(msg: Message) {//在消息周圍添加8dp的距離Row(modifier = Modifier.padding(all = 8.dp)) {Image(painter = painterResource(R.drawable.profile_picture),contentDescription = "Contact profile picture",modifier = Modifier//設(shè)置圖片大小.size(40.dp)//將圖片修剪為圓形.clip(CircleShape))//在圖片和消息之間添加一個水平的空間(Spacer),間距為8dpSpacer(modifier = Modifier.width(8.dp))Column {Text(text = msg.author)// 在發(fā)送者和消息內(nèi)容之間添加一個垂直的空間Spacer(modifier = Modifier.height(4.dp))Text(text = msg.body)}}
}

Material Design

Compose 旨在支持 Material Design 原則。它的許多界面元素都原生支持 Material Design。

使用

Jetpack Compose 原生提供 Material Design 3 及其界面元素的實現(xiàn)。我們使用 Material Design 樣式改進MessageCard可組合項的外觀。

在創(chuàng)建ComposeTutorial項目時,會同時創(chuàng)建一個名為“ComposeTutorialTheme”的Material主題,和一個來自Material Design 3的“Surface”。我們將用到這兩位來封裝MessageCard函數(shù)。

Material Design是圍繞Color、Typography、Shape來構(gòu)建的,我們將逐一添加這些元素。

修改MainActivity:

class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {//使用ComposeTutorialTheme和Surface封裝MessageCard函數(shù)ComposeTutorialTheme {//將給定的組件或布局填滿父容器的界面Surface(modifier = Modifier.fillMaxSize()) {MessageCard(Message("Android", "Jetpack Compose"))}}}}
}@Preview
@Composable
fun PreviewMessageCard() {//在@Preview中也要封裝,沿用應(yīng)用主題中定義的樣式,保持統(tǒng)一ComposeTutorialTheme {Surface {MessageCard(msg = Message("Lexi", "Take a look at Jetpack Compose, it's great!"))}}
}

顏色

@Composable
fun MessageCard(msg: Message) {Row(modifier = Modifier.padding(all = 8.dp)) {Image(painter = painterResource(R.drawable.profile_picture),contentDescription = null,modifier = Modifier.size(40.dp).clip(CircleShape)//為圖像增加一個圓框.border(1.5.dp, MaterialTheme.colorScheme.primary, CircleShape))Spacer(modifier = Modifier.width(8.dp))Column {Text(text = msg.author,//通過MaterialTheme.colorScheme,使用已封裝主題中的顏色設(shè)置樣式color = MaterialTheme.colorScheme.secondary)Spacer(modifier = Modifier.height(4.dp))Text(text = msg.body)}}
}

Typography(排版)

MaterialTheme?中提供了 Material Typography 樣式,只需將其添加到?Text?可組合項中即可。

@Composable
fun MessageCard(msg: Message) {Row(modifier = Modifier.padding(all = 8.dp)) {Image(painter = painterResource(R.drawable.profile_picture),contentDescription = null,modifier = Modifier.size(40.dp).clip(CircleShape).border(1.5.dp, MaterialTheme.colorScheme.primary, CircleShape))Spacer(modifier = Modifier.width(8.dp))Column {Text(text = msg.author,color = MaterialTheme.colorScheme.secondary,style = MaterialTheme.typography.titleSmall)Spacer(modifier = Modifier.height(4.dp))Text(text = msg.body,style = MaterialTheme.typography.bodyMedium)}}
}

Shape(形狀)

@Composable
fun MessageCard(msg: Message) {Row(modifier = Modifier.padding(all = 8.dp)) {Image(painter = painterResource(R.drawable.profile_picture),contentDescription = null,modifier = Modifier.size(40.dp).clip(CircleShape).border(1.5.dp, MaterialTheme.colorScheme.primary, CircleShape))Spacer(modifier = Modifier.width(8.dp))Column {Text(text = msg.author,color = MaterialTheme.colorScheme.secondary,style = MaterialTheme.typography.titleSmall)Spacer(modifier = Modifier.height(4.dp))//將消息詳情封裝在Surface中,此時可自定義消息詳情的大小、形狀等布局Surface(shape = MaterialTheme.shapes.medium, shadowElevation = 1.dp) {Text(text = msg.body,modifier = Modifier.padding(all = 4.dp),style = MaterialTheme.typography.bodyMedium)}}}
}

啟用深色主題

又稱夜間模式。由于支持Material Design,Jetpack Compose默認能夠處理深色主題。

使用Material Design顏色、文本和背景時,系統(tǒng)會自動適應(yīng)深色背景。

//可以在文件中以單獨函數(shù)的形式創(chuàng)建多個預(yù)覽,也可以向同一個函數(shù)中添加多個注解
@Preview(name = "Light Mode")
@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES,showBackground = true,name = "Dark Mode"
)
@Composable
fun PreviewMessageCard() {ComposeTutorialTheme {Surface {MessageCard(msg = Message("Lexi", "Hey, take a look at Jetpack Compose, it's great!"))}}
}


列表和動畫

創(chuàng)建消息列表(LazyColumn、LazyRow)

LazyColumn、LazyRow是Compose常見的兩個組件,他們的優(yōu)點是可以延遲加載。他們只會加載當前可見的列表項,并在滾動時動態(tài)回收其他項,這使得他們適用于展示大量數(shù)據(jù)或無限滾動的列表。

在使用中,會包含一個items子項。他接受LIst作為參數(shù),并且其lambda會接收到參數(shù)。系統(tǒng)會針對提供的List的每個項調(diào)用此lambda。

@Composable
fun Conversation(messages: List<Message>) {LazyColumn {//items子項items(messages) { message ->MessageCard(message)}}
}@Preview
@Composable
fun PreviewConversation() {ComposeTutorialTheme {Conversation(SampleData.conversationSample)}
}

在展開消息時顯示動畫效果

為了存儲某條消息是否已展開,我們使用remember和mutableStateOf函數(shù)。

可組合函數(shù)可以使用remember將本地狀態(tài)存儲到內(nèi)存中,并跟蹤傳遞給mutableStateOf的值的變化。而mutableStateOf函數(shù)可以在可組合函數(shù)內(nèi)部創(chuàng)建一個可變的狀態(tài),并將其與UI組件進行綁定。當狀態(tài)值發(fā)生變化時,Compose會自動重繪相關(guān)的組件。

class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {ComposeTutorialTheme {Conversation(SampleData.conversationSample)}}}
}@Composable
fun MessageCard(msg: Message) {Row(modifier = Modifier.padding(all = 8.dp)) {Image(painter = painterResource(R.drawable.profile_picture),contentDescription = null,modifier = Modifier.size(40.dp).clip(CircleShape).border(1.5.dp, MaterialTheme.colorScheme.primary, CircleShape))Spacer(modifier = Modifier.width(8.dp))// 在此變量中,跟蹤當前消息是否展開var isExpanded by remember { mutableStateOf(false) }// 當點擊該消息時,改變展開狀態(tài)Column(modifier = Modifier.clickable { isExpanded = !isExpanded }) {Text(text = msg.author,color = MaterialTheme.colorScheme.secondary,style = MaterialTheme.typography.titleSmall)Spacer(modifier = Modifier.height(4.dp))Surface(shape = MaterialTheme.shapes.medium,shadowElevation = 1.dp,) {Text(text = msg.body,modifier = Modifier.padding(all = 4.dp),// 若展開,全部顯示;不展開,最大顯示一行maxLines = if (isExpanded) Int.MAX_VALUE else 1,style = MaterialTheme.typography.bodyMedium)}}}
}

注:需要添加以下導(dǎo)入內(nèi)容才能正確使用 Kotlin 的委托屬性語法(by?關(guān)鍵字):
import androidx.compose.runtime.getValue

import androidx.compose.runtime.setValue

使用by關(guān)鍵字是避免每次都訪問value屬性的好方法。

同時需要注意的是,我們應(yīng)該只在可組合函數(shù)的作用域之外改變狀態(tài)。這是因為可組合項可以頻繁運行、且以任何順序執(zhí)行。???????此處我們可以在clickable中修改isExpanded的值,是因為clickable不是可組合函數(shù)。

除了remember關(guān)鍵字,我們還可以使用rememberSaveable,它與前者類似,但存儲的值可以在重新創(chuàng)建activity和進程后保存下來。需要注意的是,rememberSaveable適用于UI狀態(tài),如購物車的商品數(shù)量或選定的標簽頁,但不適用于過渡動畫狀態(tài)等。

同時我們可以加入顏色,在消息縮放時改變消息的顏色。但不能只是簡單的改變消息的背景顏色,我們應(yīng)當加入動畫,使得變化時逐步更改。

相同的,在點擊縮放時,我們也可以加上動畫,使得縮放更加順滑。

@Composable
fun MessageCard(msg: Message) {Row(modifier = Modifier.padding(all = 8.dp)) {Image(painter = painterResource(R.drawable.profile_picture),contentDescription = null,modifier = Modifier.size(40.dp).clip(CircleShape).border(1.5.dp, MaterialTheme.colorScheme.secondary, CircleShape))Spacer(modifier = Modifier.width(8.dp))var isExpanded by remember { mutableStateOf(false) }// 該變量會逐步更新顏色,animateColorAsState函數(shù)實現(xiàn)顏色之間的過渡動畫效果val surfaceColor by animateColorAsState(if (isExpanded) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.surface,)Column(modifier = Modifier.clickable { isExpanded = !isExpanded }) {Text(text = msg.author,color = MaterialTheme.colorScheme.secondary,style = MaterialTheme.typography.titleSmall)Spacer(modifier = Modifier.height(4.dp))Surface(shape = MaterialTheme.shapes.medium,shadowElevation = 1.dp,color = surfaceColor,//加入animateContentSize,給縮放加入動畫,更加順滑modifier = Modifier.animateContentSize().padding(1.dp)) {Text(text = msg.body,modifier = Modifier.padding(all = 4.dp),maxLines = if (isExpanded) Int.MAX_VALUE else 1,style = MaterialTheme.typography.bodyMedium)}}}
}
http://www.risenshineclean.com/news/50053.html

相關(guān)文章:

  • h5微信網(wǎng)站建設(shè)百度app手機版
  • 怎么做網(wǎng)站彈幕效果網(wǎng)站制作模板
  • 傳奇網(wǎng)站劫持怎么做b2b網(wǎng)站大全免費
  • 東城區(qū)住房和建設(shè)委員會網(wǎng)站合肥關(guān)鍵詞排名優(yōu)化
  • wordpress 置頂在前做網(wǎng)站優(yōu)化哪家公司好
  • 南京推廣公司seo sem是啥
  • 能免費做微信群推廣的網(wǎng)站巨量算數(shù)
  • 本地wordpress站點上傳搜狗站長平臺驗證網(wǎng)站
  • 網(wǎng)站什么語言好五種新型營銷方式
  • 電商供應(yīng)鏈網(wǎng)站競價推廣返點開戶
  • 手機網(wǎng)站建設(shè)項目seo店鋪描述
  • 怎么查網(wǎng)站域名備案太原seo快速排名
  • 做移動網(wǎng)站優(yōu)化優(yōu)seo推廣代運營
  • 9277在線觀看免費高清完整版手機網(wǎng)站搜索優(yōu)化
  • 濟南wordpress 建站淘寶搜索詞排名查詢
  • 網(wǎng)站建設(shè)日程表表格seo的流程是怎么樣的
  • 遼寧省網(wǎng)站備案注銷百度網(wǎng)站統(tǒng)計
  • 深圳seo優(yōu)化服務(wù)商seo引擎搜索入口
  • wap手機網(wǎng)站開發(fā)百度如何購買關(guān)鍵詞
  • 幫人做網(wǎng)站怎么收費b2b免費發(fā)布網(wǎng)站大全
  • iis 做網(wǎng)站免費網(wǎng)站建站頁面
  • 男女做那個暖暖網(wǎng)站百度標注平臺怎么加入
  • 順德品牌網(wǎng)站建設(shè)優(yōu)惠友情鏈接是外鏈嗎
  • 自由策劃網(wǎng)站建設(shè)企業(yè)網(wǎng)絡(luò)推廣軟件
  • 徐州建設(shè)網(wǎng)站價格百度官網(wǎng)認證多少錢
  • wordpress如何加菜單seo檢查工具
  • 湖北省建設(shè)質(zhì)量安全協(xié)會網(wǎng)站網(wǎng)站公司網(wǎng)站建設(shè)
  • 泰安正規(guī)的網(wǎng)站建設(shè)站長工具收錄
  • 做購物網(wǎng)站寫數(shù)據(jù)庫的流程網(wǎng)絡(luò)營銷成功案例有哪些2022
  • 東營企業(yè)網(wǎng)站排名seo服務(wù)外包報價