隐藏特定时间的布局
Hide layout for particular time
我正在构建 app.in,我想在上午 8 点到 12 点之间隐藏我的布局。我尝试使用线程和异步任务,但我不明白如何给出 8 到 12 之间的时间段。
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<de.hdodenhof.circleimageview.CircleImageView
android:layout_width="40dp"
android:layout_height="50dp"
android:layout_marginLeft="3dp"
android:scaleType="centerCrop"
android:src="@drawable/vegitables"
app:civ_border_color="#80000000"
app:civ_border_width="1dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="5dp"
android:text="Veg :"
android:textColor="#F00"
android:textSize="18sp"
android:textStyle="bold" />
</LinearLayout>
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="150dp"/>
</LinearLayout>
试试这个:
Calendar now = Calendar.getInstance();
int currentHour = now.get(Calendar.HOUR_OF_DAY);
if(currentHour >=7 && currentHour <= 11)
rootLayoutReference.setVisibility(View.GONE);
else
rootLayoutReference.setVisibility(View.VISIBLE);
首先,12 AM 表示午夜,而 12 PM 表示中午。我以为你的意思是中午,但这个解决方案可以很容易地更改为任何时间界限。
您可以将以下内容添加到您的Activity:
public class MyActivity extends AppCompatActivity {
private Handler handler;
private View layout;
private Runnable updateVisibilityCallback;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity);
handler = new Handler(Looper.getMainLooper());
layout = findViewById(R.id.layout);
updateVisibilityCallback = new Runnable() {
@Override
public void run() {
updateTextVisibility();
}
};
}
@Override
protected void onResume() {
super.onResume();
updateTextVisibility();
}
@Override
protected void onPause() {
super.onPause();
handler.removeCallbacks(updateVisibilityCallback);
}
private void updateTextVisibility() {
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
if (8 <= hour && hour <= 11) {
layout.setVisibility(View.GONE);
} else {
layout.setVisibility(View.VISIBLE);
}
handler.postDelayed(updateVisibilityCallback, getVisibilityUpdateDelay());
}
private long getVisibilityUpdateDelay() {
Calendar rightNow = Calendar.getInstance();
int hour = rightNow.get(Calendar.HOUR_OF_DAY);
Calendar nextUpdate = Calendar.getInstance();
nextUpdate.set(Calendar.MINUTE, 0);
nextUpdate.set(Calendar.SECOND, 0);
nextUpdate.set(Calendar.MILLISECOND, 0);
if (hour < 8) {
nextUpdate.set(Calendar.HOUR_OF_DAY, 8);
} else if (hour < 12) {
nextUpdate.set(Calendar.HOUR_OF_DAY, 12);
} else {
nextUpdate.add(Calendar.DATE, 1);
nextUpdate.set(Calendar.HOUR_OF_DAY, 8);
}
return nextUpdate.getTimeInMillis() - rightNow.getTimeInMillis();
}
}
每次当 Activity 对用户可见时(在 onResume
中),您检查时间并更新布局的可见性。此外,您可以跟踪下一次更新何时发生——您可以使用 Handler
计算 8:00 或 12:00 和 post 和 Runnable
的延迟。每当您的用户不再关注 activity 时,您就会清除回调。
我正在构建 app.in,我想在上午 8 点到 12 点之间隐藏我的布局。我尝试使用线程和异步任务,但我不明白如何给出 8 到 12 之间的时间段。
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<de.hdodenhof.circleimageview.CircleImageView
android:layout_width="40dp"
android:layout_height="50dp"
android:layout_marginLeft="3dp"
android:scaleType="centerCrop"
android:src="@drawable/vegitables"
app:civ_border_color="#80000000"
app:civ_border_width="1dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="5dp"
android:text="Veg :"
android:textColor="#F00"
android:textSize="18sp"
android:textStyle="bold" />
</LinearLayout>
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="150dp"/>
</LinearLayout>
试试这个:
Calendar now = Calendar.getInstance();
int currentHour = now.get(Calendar.HOUR_OF_DAY);
if(currentHour >=7 && currentHour <= 11)
rootLayoutReference.setVisibility(View.GONE);
else
rootLayoutReference.setVisibility(View.VISIBLE);
首先,12 AM 表示午夜,而 12 PM 表示中午。我以为你的意思是中午,但这个解决方案可以很容易地更改为任何时间界限。
您可以将以下内容添加到您的Activity:
public class MyActivity extends AppCompatActivity {
private Handler handler;
private View layout;
private Runnable updateVisibilityCallback;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity);
handler = new Handler(Looper.getMainLooper());
layout = findViewById(R.id.layout);
updateVisibilityCallback = new Runnable() {
@Override
public void run() {
updateTextVisibility();
}
};
}
@Override
protected void onResume() {
super.onResume();
updateTextVisibility();
}
@Override
protected void onPause() {
super.onPause();
handler.removeCallbacks(updateVisibilityCallback);
}
private void updateTextVisibility() {
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
if (8 <= hour && hour <= 11) {
layout.setVisibility(View.GONE);
} else {
layout.setVisibility(View.VISIBLE);
}
handler.postDelayed(updateVisibilityCallback, getVisibilityUpdateDelay());
}
private long getVisibilityUpdateDelay() {
Calendar rightNow = Calendar.getInstance();
int hour = rightNow.get(Calendar.HOUR_OF_DAY);
Calendar nextUpdate = Calendar.getInstance();
nextUpdate.set(Calendar.MINUTE, 0);
nextUpdate.set(Calendar.SECOND, 0);
nextUpdate.set(Calendar.MILLISECOND, 0);
if (hour < 8) {
nextUpdate.set(Calendar.HOUR_OF_DAY, 8);
} else if (hour < 12) {
nextUpdate.set(Calendar.HOUR_OF_DAY, 12);
} else {
nextUpdate.add(Calendar.DATE, 1);
nextUpdate.set(Calendar.HOUR_OF_DAY, 8);
}
return nextUpdate.getTimeInMillis() - rightNow.getTimeInMillis();
}
}
每次当 Activity 对用户可见时(在 onResume
中),您检查时间并更新布局的可见性。此外,您可以跟踪下一次更新何时发生——您可以使用 Handler
计算 8:00 或 12:00 和 post 和 Runnable
的延迟。每当您的用户不再关注 activity 时,您就会清除回调。