Ich musste dies selbst tun, um eine "Ich stimme zu" -Schaltfläche anzuzeigen, sobald der Benutzer an den unteren Rand eines EULA gescrollt hat. Anwälte, nicht wahr?
In der Tat, wenn Sie die WebView (anstelle der ScrollView wie in der Antwort von @JackTurky) überschreiben, können Sie getContentHeight() aufrufen, um die Höhe des Inhalts zu erhalten, anstatt getBottom(), die den sichtbaren unteren und ist Nicht nützlich.
Dies ist meine umfassende Lösung. Soweit ich das sehen kann, ist dies alles API Level 1 Zeug, also sollte es überall funktionieren.
public class EulaWebView extends WebView {
public EulaWebView(Context context)
{
this(context, null);
}
public EulaWebView(Context context, AttributeSet attrs)
{
this(context, attrs, 0);
}
public EulaWebView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}
public OnBottomReachedListener mOnBottomReachedListener = null;
private int mMinDistance = 0;
/**
* Set the listener which will be called when the WebView is scrolled to within some
* margin of the bottom.
* @param bottomReachedListener
* @param allowedDifference
*/
public void setOnBottomReachedListener(OnBottomReachedListener bottomReachedListener, int allowedDifference) {
mOnBottomReachedListener = bottomReachedListener;
mMinDistance = allowedDifference;
}
/**
* Implement this interface if you want to be notified when the WebView has scrolled to the bottom.
*/
public interface OnBottomReachedListener {
void onBottomReached(View v);
}
@Override
protected void onScrollChanged(int left, int top, int oldLeft, int oldTop) {
if (mOnBottomReachedListener != null) {
if ((getContentHeight() - (top + getHeight())) <= mMinDistance)
mOnBottomReachedListener.onBottomReached(this);
}
super.onScrollChanged(left, top, oldLeft, oldTop);
}
}
Ich benutze diese ein, sobald der Benutzer auf dem Boden des WebView gescrollt hat „I Agree“, um anzuzeigen, wo ich es wie folgt aus (in einer Klasse aufrufen, die „OnBottomReachedListener implementiert“:
EulaWebView mEulaContent;
Button mEulaAgreed;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.eula);
mEulaContent = (EulaWebView) findViewById(R.id.eula_content);
StaticHelpers.loadWebView(this, mEulaContent, R.raw.stylesheet, StaticHelpers.readRawTextFile(this, R.raw.eula), null);
mEulaContent.setVerticalScrollBarEnabled(true);
mEulaContent.setOnBottomReachedListener(this, 50);
mEulaAgreed = (Button) findViewById(R.id.eula_agreed);
mEulaAgreed.setOnClickListener(this);
mEulaAgreed.setVisibility(View.GONE);
}
@Override
public void onBottomReached(View v) {
mEulaAgreed.setVisibility(View.VISIBLE);
}
So
, wenn der Boden erreicht ist (oder in diesem Fall, wenn sie innerhalb von 50 Pixeln davon bekommen) die „I Agree“ Taste erscheint.
Die Webansicht hat jedoch keinen Verweis auf die Schaltfläche. – Daniel