谁能给我一个关于Android中LineLayout的详细讲解?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谁能给我一个关于Android中LineLayout的详细讲解?相关的知识,希望对你有一定的参考价值。
楼主写错了吧,应该是LinearLayout (线性布局)android常用有五大布局对象,它们分别是FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局).
其中,线性布局LinearLayout是比较简单和最常用的一种。
1)简单用法:
LinearLayout以你为它设置的垂直或水平的属性值,来排列所有的子元素,这是由属性android:orientation="vertical" 或"horizonal"来设定的。所有的子元素都被堆放在其它元素之后,因此一个垂直列表的每一行只会有 一个元素,而不管他们有多宽,而一个水平列表将会只有一个行高(高度为最高子元素的高度加上边框高度)。LinearLayout保持子元素之间的间隔以 及互相对齐(相对一个元素的右对齐、中间对齐或者左对齐)。
2)加入weight实现高级功能
LinearLayout还支持为单独的子元素指定weight 。好处就是允许子元素可以填充屏幕上的剩余空间。这也避免了在一个大屏幕中,一串小对象挤 成一堆的情况,而是允许他们放大填充空白。子元素指定一个weight 值,剩余的空间就会按这些子元素指定的weight 比例分配给这些子元素。默认的 weight 值为0。例如,如果有三个文本框,其中两个指定了weight 值为1,那么,这两个文本框将等比例地放大,并填满剩余的空间,而第三个文本框 不会放大。 参考技术A Android中LinearLayout是线性布局控件,它包含的子控件将以横向或竖向的方式排列,按照相对位置来排列所有的widgets或者其他的containers,超过边界时,某些控件将缺失或消失。因此一个垂直列表的每一行只会有一个widget或者是container,而不管他们有多宽,而一个水平列表将会只有一个行高(高度为最高子控件的高度加上边框高度)。LinearLayout保持其所包含的widget或者是container之间的间隔以及互相对齐(相对一个控件的右对齐、中间对齐或者左对齐)。
1.xml属性
android:baselineAligned:是否允许用户调整它内容的基线。
android:baselineAlignedChildIndex:当一个线性布局与另一个布局是按基线对齐的一部分,它可以指定其内容的基线对齐方式。
android:gravity:指定如何在该对象中放置此对象的内容(x/y坐标值)。
android:orientation:设置它内容的对其方向(横向/竖向)。
2.在LinearLayout中设置排列方式为水平时只有垂直方向的设置是有效的,水平方向的设置是无效的:即left,right,center_horizontal 是不生效的
3.在LinearLayout中设置排列方式为垂直时只有水平方向设置是有效的,垂直方向的设置是无效的是无效的:即top,bottom,center_vertical 是无效的 参考技术B 下载官方SDK里有,专门讲各种layout的
谁能给我一个关于“啥使对象有状态”的这种情况的好例子?
【中文标题】谁能给我一个关于“啥使对象有状态”的这种情况的好例子?【英文标题】:Can anyone give me a good example of This kind of situation about "What makes an object stateful"?谁能给我一个关于“什么使对象有状态”的这种情况的好例子? 【发布时间】:2016-01-23 04:58:45 【问题描述】:我不明白这句话的意思(来自Scala-Threading/Odersky/18-stateful-objects.txt line 88):
一个类可能是有状态的,而无需定义或继承任何变量因为它会将方法调用转发给具有可变状态的其他对象。
谁能给我一个在 Scala 中这种情况的好例子吗?
【问题讨论】:
【参考方案1】:class Account
private var balance = 0
def getBalance = balance
def deposit(amount: Int): Unit = balance += amount
class NoVarAccount
val account = new Account()
def balance = account.getBalance
def deposit(amount: Int) = account.deposit(amount)
现在,NoVarAccount
中没有任何 var
,但它仍然是有状态的,因为它会将调用转发到确实有状态的 Account
。
事实上,你无法保证在同一个对象上调用balance
两次会得到相同的结果。
val account = new NoVarAccount()
account.balance // 0
account.deposit(42)
account.balance // 42
在此示例中,account.balance
不是引用透明,即您不能将 account.balance
替换为其返回值,因为它可能会有所不同。
相反,无状态帐户将如下所示:
class StatelessAccount(val balance: Int = 0)
def deposit(amount: Int) = new StatelessAccount(balance + amount)
或者更习惯用法:
case class StatelessAccount(balance: Int = 0)
def deposit(amount: Int) = this.copy(balance = balance + amount))
在这种情况下,balance
是引用透明的:
val account = StatelessAccount()
account.balance // 0
val account2 = account.deposit(42)
account2.balance // 42
account.balance // still 0
【讨论】:
【参考方案2】:class FileWrapper(file : java.io.RandomAccessFile)
def isEmpty = file.read() < 0
def next = file.read()
在上面的示例中,文件保持自己的状态,但 FileWrapper 仅将方法调用转发给文件对象。
【讨论】:
以上是关于谁能给我一个关于Android中LineLayout的详细讲解?的主要内容,如果未能解决你的问题,请参考以下文章