新问题。所以,我正在制作可点击的文本部分,可以展开和收缩以显示来自一个非常有用的教程的更多文本,但我被困在最后一部分。文本部分有一个if/else语句,用于将内容从GONE切换到VISIBLE。但是现在我试图调整代码以包含更多的else语句,我不知道条件应该是什么。
public class AlabamaActivity extends AppCompatActivity {
TextView registration_info;
TextView info2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_alabama);
registration_info = (TextView)findViewById(R.id.registration_info);
// hidden until its title is clicked
registration_info.setVisibility(View.GONE);
info2 = (TextView) findViewById(R.id.info2);
info2.setVisibility(View.GONE);
public void toggle_contents(View v) {
if (registration_info.isShown()){
Fx.slide_up(this, registration_info);
registration_info.setVisibility(View.GONE);
}
else if (//?????){
registration_info.setVisibility(View.VISIBLE);
Fx.slide_down(this, registration_info);
}
else if (info2.isShown()){
Fx.slide_up(this, info2);
info2.setVisibility(View.GONE);
}
else if (//?????){
info2.setVisibility(View.VISIBLE);
Fx.slide_down(this, info2);
}
...
这是我试图调整的原始if/else语句。
public void toggle_contents(View v) {
if (registration_info.isShown()){
Fx.slide_up(this, registration_info);
registration_info.setVisibility(View.GONE);
}
else {
registration_info.setVisibility(View.VISIBLE);
Fx.slide_down(this, registration_info);
}
我在过去的几个小时里试了试错,我在网上得到的结果对像我这样的新手来说有点太多了。
另外,我一直在想我是否可以做这个开关/箱子?
谢谢!
编辑—尽量不要笑lol
Fx code
public static void slide_down(Context ctx, View v) {
Animation a = AnimationUtils.loadAnimation(ctx, R.anim.slide_down);
if (a != null) {
a.reset();
if (v != null) {
v.clearAnimation();
v.startAnimation(a);
}
}
}
public static void slide_up(Context ctx, View v){
Animation a = AnimationUtils.loadAnimation(ctx, R.anim.slide_up);
if(a != null){
a.reset();
if(v != null){
v.clearAnimation();
v.startAnimation(a);
}
}
}
}
滑下来
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<scale
android:duration="200"
android:fromXScale="0.0"
android:fromYScale="1.0"
android:interpolator="@android:anim/linear_interpolator"
android:toXScale="1.0"
android:toYScale="1.0" />
</set>
幻灯片
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<scale
android:duration="200"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:interpolator="@android:anim/linear_interpolator"
android:toXScale="1.0"
android:toYScale="0.0" />
</set>
xml: <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/Alabama">
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/registration"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Registration"
android:textSize="20sp"
android:clickable="true"
android:onClick="toggle_contents"
android:paddingLeft="16dp"
android:paddingBottom="16dp"/>
<!--content to hide/show -->
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/registration_info"
android:text="info here"
android:paddingLeft="16dp"
android:paddingBottom="16dp"/>
<TextView
android:id="@+id/info2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Info2"
android:textSize="20sp"
android:clickable="true"
android:onClick="toggle_contents"
android:paddingLeft="16dp"
android:paddingBottom="16dp"/>
<!--content to hide/show -->
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/info2"
android:text="info here"
android:paddingLeft="16dp"
android:paddingBottom="16dp"/>
这应该可以完成工作,[目前]:
public void toggle_contents(View v) {
// first set
if (registration_info.isShown()){
Fx.slide_up(this, registration_info);
registration_info.setVisibility(View.GONE);
}
else {
registration_info.setVisibility(View.VISIBLE);
Fx.slide_down(this, registration_info);
}
// second set
if (info2.isShown()){
Fx.slide_up(this, info2);
info2.setVisibility(View.GONE);
}
else {
info2.setVisibility(View.VISIBLE);
Fx.slide_down(this, info2);
}
[编辑]
根据你更新的帖子,我相信这应该足够了:
public void toggle_contents(View v) {
if (v.isShown()){
Fx.slide_up(this, v);
v.setVisibility(View.GONE);
}
else {
v.setVisibility(View.VISIBLE);
Fx.slide_down(this, v;
}
[EDIT2]
既然,你将点击监听器附加到一个textview和扩展/折叠另一个,切换情况似乎走的路:
public void toggle_contents(View v) {
View childTV;
switch(v.getId()) {
case R.id.registration:
childTV = findViewById(R.id.registration_info);
// Can add more cases here
default:
childTV = findViewById(R.id.info2_child);
}
if (childTV.isShown()){
Fx.slide_up(this, childTV);
childTV.setVisibility(View.GONE);
}
else {
childTV.setVisibility(View.VISIBLE);
Fx.slide_down(this, childTV);
}
}
注意:目前,您的两个视图在xml中的id为info2
。我在上面取了一个假id,你应该相应地修复它。