⑴ android 中怎么判断WebView已经滑动到底部或顶部还在滑动类似上拉刷新下来加载更多.
我们需要重写webview的滑动方法,自定义一个webview: FoundWebView(可自由命名)代码如下
package com.paoyx.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.webkit.WebView;
/** * 重新webview
* @author paoyx */
public class FoundWebView extends WebView {
ScrollInterface web;
public FoundWebView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public FoundWebView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public FoundWebView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
//Log.e("hhah",""+l+" "+t+" "+oldl+" "+oldt);
web.onSChanged(l, t, oldl, oldt);
}
public void (ScrollInterface t){ this.web=t;
}
/**
* 定义滑动接口
* @param t
*/
public interface ScrollInterface {
public void onSChanged(int l, int t, int oldl, int oldt) ;
}}
在activity的onCreate方法中调用该webview,代码如下:
private FoundWebView mWebView;
mWebView = (FoundWebView)findViewById(R.id.mWebView);
mWebView.(new ScrollInterface() {
@Override
public void onSChanged(int l, int t, int oldl, int oldt) {
// TODO Auto-generated method stub
float webcontent = mWebView.getContentHeight()*mWebView.getScale();//webview的高度
float webnow = mWebView.getHeight()+ mWebView.getScrollY();//当前webview的高度
if( mWebView.getContentHeight()* mWebView.getScale() -( mWebView.getHeight()+ mWebView.getScrollY())==0){
//已经处于底端
lay_bottom_layout.setVisibility(View.VISIBLE);
}else {
lay_bottom_layout.setVisibility(View.GONE);
}
//已经处于顶端
if (mWebView.getScaleY() == 0) {
}
}});
END
⑵ android 底部导航栏
导航栏的话使用actionbar就好,或者自己写一个更改view达到切换效果。
⑶ android 怎么实现点击菜单在顶部和底部同时呼出不同的菜单选项
菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu),以下说的是创建OptionsMenu
一、概述
public boolean onCreateOptionsMenu(Menu menu):使用此方法调用OptionsMenu。
public boolean onOptionsItemSelected(MenuItem item):选中菜单项后发生的动作。
public void onOptionsMenuClosed(Menu menu):菜单关闭后发生的动作。
public boolean onPrepareOptionsMenu(Menu menu):选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单。
public boolean onMenuOpened(int featureId, Menu menu):单打开后发生的动作。
二、默认样式
默认样式是在屏幕底部弹出一个菜单,这个菜单我们就叫他选项菜单OptionsMenu,一般情况下,选项菜单最多显示2排每排3个菜单项,这些菜单项有文字有图标,也被称作Icon Menus,如果多于6项,从第六项开始会被隐藏,在第六项会出现一个More里,点击More才出现第六项以及以后的菜单项,这些菜单项也被称作Expanded Menus。下面介绍。
1.main.xml
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextViewandroid:layout_width="wrap_content"
android:layout_height="wrap_content"android:text="请点击Menu键显示选项菜单"
android:id="@+id/TextView02"/>
</LinearLayout>
2。重载onCreateOptionsMenu(Menu menu)方法
重载onCreateOptionsMenu(Menu menu)方法,并在此方法中添加菜单项,最后返回true,如果false,菜单则不会显示。
(Menumenu)
@Override
(Menumenu){
/*
*
*add()方法的四个参数,依次是:
*
*1、组别,如果不分组的话就写Menu.NONE,
*
*2、Id,这个很重要,Android根据这个Id来确定不同的菜单
*
*3、顺序,那个菜单现在在前面由这个参数的大小决定
*
*4、文本,菜单的显示文本
*/
menu.add(Menu.NONE,Menu.FIRST+1,5,"删除").setIcon(
android.R.drawable.ic_menu_delete);
//setIcon()方法为菜单设置图标,这里使用的是系统自带的图标,同学们留意一下,以
//android.R开头的资源是系统提供的,我们自己提供的资源是以R开头的
menu.add(Menu.NONE,Menu.FIRST+2,2,"保存").setIcon(
android.R.drawable.ic_menu_edit);
menu.add(Menu.NONE,Menu.FIRST+3,6,"帮助").setIcon(
android.R.drawable.ic_menu_help);
menu.add(Menu.NONE,Menu.FIRST+4,1,"添加").setIcon(
android.R.drawable.ic_menu_add);
menu.add(Menu.NONE,Menu.FIRST+5,4,"详细").setIcon(
android.R.drawable.ic_menu_info_details);
menu.add(Menu.NONE,Menu.FIRST+6,3,"发送").setIcon(
android.R.drawable.ic_menu_send);
returntrue;
}
3。为菜单项注册事件
使用onOptionsItemSelected(MenuItem item)方法为菜单项注册事件
(MenuItemitem)
@Override
(MenuItemitem){
switch(item.getItemId()){
caseMenu.FIRST+1:
Toast.makeText(this,"删除菜单被点击了",Toast.LENGTH_LONG).show();
break;
caseMenu.FIRST+2:
Toast.makeText(this,"保存菜单被点击了",Toast.LENGTH_LONG).show();
break;
caseMenu.FIRST+3:
Toast.makeText(this,"帮助菜单被点击了",Toast.LENGTH_LONG).show();
break;
caseMenu.FIRST+4:
Toast.makeText(this,"添加菜单被点击了",Toast.LENGTH_LONG).show();
break;
caseMenu.FIRST+5:
Toast.makeText(this,"详细菜单被点击了",Toast.LENGTH_LONG).show();
break;
caseMenu.FIRST+6:
Toast.makeText(this,"发送菜单被点击了",Toast.LENGTH_LONG).show();
break;
}
returnfalse;
}
4.完整代码
packagecom.android.menu;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.view.Menu;
importandroid.view.MenuItem;
importandroid.widget.Toast;
{
/**.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
(Menumenu){
/*
*
*add()方法的四个参数,依次是:
*
*1、组别,如果不分组的话就写Menu.NONE,
*
*2、Id,这个很重要,Android根据这个Id来确定不同的菜单
*
*3、顺序,那个菜单现在在前面由这个参数的大小决定
*
*4、文本,菜单的显示文本
*/
menu.add(Menu.NONE,Menu.FIRST+1,5,"删除").setIcon(
android.R.drawable.ic_menu_delete);
//setIcon()方法为菜单设置图标,这里使用的是系统自带的图标,同学们留意一下,以
//android.R开头的资源是系统提供的,我们自己提供的资源是以R开头的
menu.add(Menu.NONE,Menu.FIRST+2,2,"保存").setIcon(
android.R.drawable.ic_menu_edit);
menu.add(Menu.NONE,Menu.FIRST+3,6,"帮助").setIcon(
android.R.drawable.ic_menu_help);
menu.add(Menu.NONE,Menu.FIRST+4,1,"添加").setIcon(
android.R.drawable.ic_menu_add);
menu.add(Menu.NONE,Menu.FIRST+5,4,"详细").setIcon(
android.R.drawable.ic_menu_info_details);
menu.add(Menu.NONE,Menu.FIRST+6,3,"发送").setIcon(
android.R.drawable.ic_menu_send);
returntrue;
}
@Override
(MenuItemitem){
switch(item.getItemId()){
caseMenu.FIRST+1:
Toast.makeText(this,"删除菜单被点击了",Toast.LENGTH_LONG).show();
break;
caseMenu.FIRST+2:
Toast.makeText(this,"保存菜单被点击了",Toast.LENGTH_LONG).show();
break;
caseMenu.FIRST+3:
Toast.makeText(this,"帮助菜单被点击了",Toast.LENGTH_LONG).show();
break;
caseMenu.FIRST+4:
Toast.makeText(this,"添加菜单被点击了",Toast.LENGTH_LONG).show();
break;
caseMenu.FIRST+5:
Toast.makeText(this,"详细菜单被点击了",Toast.LENGTH_LONG).show();
break;
caseMenu.FIRST+6:
Toast.makeText(this,"发送菜单被点击了",Toast.LENGTH_LONG).show();
break;
}
returnfalse;
}
@Override
publicvoidonOptionsMenuClosed(Menumenu){
Toast.makeText(this,"选项菜单关闭了",Toast.LENGTH_LONG).show();
}
@Override
(Menumenu){
Toast.makeText(this,
"选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单",
Toast.LENGTH_LONG).show();
//如果返回false,此方法就把用户点击menu的动作给消费了,onCreateOptionsMenu方法将不会被调用
returntrue;
}
}
5.运行效果
⑷ eclipse android怎么自定义底部tab菜单
实现自定义tab过程如下:
1.制作4个9patch的tab样式,可参考android默认的资源
tab_unselected.9.png tab_selected.9.pngtab_press.9.pngtab_focus.9.png
这4个资源分别代表Tab的4种状态。
2.定义Tab的selector样式(就叫它tab_indicator.xml好了),将其放入drawable文件夹下,代码如下:
xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected" />
<item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected" />
<item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_focus" />
<item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_focus" />
<item android:state_pressed="true" android:drawable="@drawable/tab_press" />
selector>
3.编写indicator的布局文件(不妨也叫tab_indicator.xml),将其放入layout文件夹下,代码如下:
xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="0dip"
android:layout_height="64dip"
android:layout_weight="1"
android:layout_marginLeft="-3dip"
android:layout_marginRight="-3dip"
android:orientation="vertical"
android:background="@drawable/tab_indicator">
<ImageView android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
/>
<TextView android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
style="?android:attr/tabWidgetStyle" mce_style="?android:attr/tabWidgetStyle"
/>
4.接下来就是在TabActivity中使用我们自己编写的Tab样式了:
// 首先获取TabWidget
mTabHost = getTabHost();
LinearLayout ll = (LinearLayout)mTabHost.getChildAt(0);
TabWidget tw = (TabWidget)ll.getChildAt(0);
RelativeLayout tabIndicator1 = (RelativeLayout) LayoutInflater.from(this).inflate(R.layout.tab_indicator, tw, false);
TextView tvTab1 = (TextView)tabIndicator1.getChildAt(1);
tvTab1.setText("tab1");
mTabHot = mTabHost.newTabSpec("TAB_1")
.setIndicator(tabIndicator1)
.setContent(contentIntent);
⑸ Android-RecyclerView实现上拉加载更多及下拉刷新
activity_main.xml
item的布局 item_rv.xml 只有一个简单的TextView
item底部item_foot.xml
看下Activity,下拉刷新主要是通过 SwipeRefreshLayout嵌套RecyclerView,实现OnRefreshListener方法,再重新设置数据给Recyclerview达乎槐到刷新数据的目的,这里我通过模拟数据达到刷新的效果,注释都有写。上拉加载更多则是通过岁睁友监听Recyclerview的滑动(OnScrollListener),当其滑动到底部时对其原有数据进行增加达到加载更多数据的目的。
设配器,Recyclerview的item有2种,一种是早洞正常的Item,另一种则是底部加载更多的Item(Foot),我们通过getItemViewType来判断返回的是哪种Item。
⑹ 安卓车机怎么显示底部虚拟导航栏
1、首先是安卓4.4以上版本,增加了虚拟的三个按键,谷歌称此三个按钮为导航栏这三个导航栏是可以隐藏起来的,以节省更多的屏幕判高空间。
2、其次点击设置,进入手机设置。
3、最后在设山首置中,掘唯尺找到“导航栏可以隐藏”的设置项,将其开启,安卓车机即可显示底部虚拟导航栏。
⑺ android怎么实现底部tab
现在使用静态的Fragment来实现底部Tab的功能:
[html] view plain
<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="match_parent"
android:orientation="vertical"
>
<fragment
android:id="@+id/fragment"
android:name="com.example.fragment.ContentFragment"
android:layout_width="fill_parent"
android:layout_height="300dp"
/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<Button
android:id="@+id/btn_news"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="新闻"
android:layout_weight="1"
/>
<Button
android:id="@+id/btn_entertainment"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="娱乐"
android:layout_weight="1"
/>
<Button
android:id="@+id/btn_political"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="政治"
android:layout_weight="1"
/>
<Button
android:id="@+id/btn_sports"派轿
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="体育"
android:layout_weight="1"
/>
</LinearLayout>
<桥指/LinearLayout>
要实现的功能就是点击下面四个按钮,敏羡配内容进行切换:
ContentFragment.java
[java] view plain
public class ContentFragment extends Fragment {
private TextView tv_content;
private View rootView;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.activity_news, null);
tv_content = (TextView) rootView.findViewById(R.id.tv_content);
return rootView;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void setContentMsg(String msg){
tv_content.setText(msg);
}
}
MainActivity.java
[java] view plain
public class MainActivity extends FragmentActivity implements OnClickListener {
private Button btn_news;
private Button btn_entertainment;
private Button btn_political;
private Button btn_sports;
private ContentFragment contentFragment;
FragmentTransaction transaction;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_news = (Button) findViewById(R.id.btn_news);
btn_entertainment = (Button) findViewById(R.id.btn_entertainment);
btn_political = (Button) findViewById(R.id.btn_political);
btn_sports = (Button) findViewById(R.id.btn_sports);
FragmentManager fragmentManager = getSupportFragmentManager();
contentFragment = (NewFragMent) fragmentManager.findFragmentById(R.id.fragment);
contentFragment.setContentMsg("新闻");
btn_news.setOnClickListener(this);
btn_entertainment.setOnClickListener(this);
btn_political.setOnClickListener(this);
btn_sports.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_news:
contentFragment.setContentMsg("新闻");
break;
case R.id.btn_entertainment:
contentFragment.setContentMsg("娱乐");
break;
case R.id.btn_political:
contentFragment.setContentMsg("政治");
break;
case R.id.btn_sports:
contentFragment.setContentMsg("体育");
break;
}
}
⑻ Android 目前最流行的 底部导航栏 用什么做的
很多android应用底部都有一个底部导航栏,方便用户在使用过程中随意切换。目前常用的做法有三种:一种是使用自定义tabHost,一种是使用activityGroup,一种是结合FrameLayout实现。再做了多款应用后,为了节约开发周期,封装了一个抽象类,只要三步便可完成底部栏的生成及不同页面的调用。
public class extends ActivityCollection {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setBottomTabBackground(resId);// 设置底部导航背景图
@Override
protected boolean isShowWindowFeature() {
return true;//设置是否显示title;
@Override
protected ListIndicatorInfo> setDrawableCollections() {
ListIndicatorInfo> IndicatorInfos = new ArrayListIndicatorInfo>();
IndicatorInfo indicatorInfo_1 = new IndicatorInfo(R.drawable.baby1,
R.drawable.baby1_s, R.string.baby1, 12, Color.WHITE,
new Intent(.this,
Activity01.class));
IndicatorInfo indicatorInfo_2 = new IndicatorInfo(R.drawable.baby2,
R.drawable.baby2_s, R.string.baby2, 12, Color.WHITE,
new Intent(.this,
Activity02.class));
IndicatorInfo indicatorInfo_3 = new IndicatorInfo(R.drawable.baby3,
R.drawable.baby3_s, R.string.baby3, 12, Color.WHITE,
new Intent(.this,
Activity03.class));
IndicatorInfo indicatorInfo_4 = new IndicatorInfo(R.drawable.baby4,
R.drawable.baby4_s, R.string.baby4, 12, Color.WHITE,
new Intent(.this,
Activity04.class));
IndicatorInfos.add(indicatorInfo_1);
IndicatorInfos.add(indicatorInfo_2);
IndicatorInfos.add(indicatorInfo_3);
IndicatorInfos.add(indicatorInfo_4);
return IndicatorInfos;
第一步:导入jar包;
第二步:让自己的homeactivity 继承ActivityCollection类;
第三步:将自己的图片资源及跳转intent放入list中,设置可选项;
雏形就形成啦!