Musiałem to zrobić samodzielnie, aby wyświetlić przycisk "Zgadzam się", gdy użytkownik przewinie się na dół EULA. Prawnicy, co?
W rzeczywistości, gdy zastępujesz WebView (zamiast ScrollView jak w odpowiedzi z @JackTurky) możesz wywołać getContentHeight(), aby uzyskać wysokość zawartości, zamiast getBottom(), która zwraca widoczne dno i jest nieprzydatne.
To jest moje kompleksowe rozwiązanie. O ile widzę, to wszystko jest na poziomie API 1, więc powinno działać wszędzie.
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);
}
}
używam tego, aby wyświetlić przycisk „Zgadzam się”, gdy użytkownik przewija do dołu WebView, gdzie ja to nazywam tak (w klasie, która „implementuje OnBottomReachedListener”:
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);
}
Więc po osiągnięciu dna (lub w tym przypadku, kiedy się w ciągu 50 pikseli nim) „I Agree” pojawi się przycisk.
Widok strony internetowej nie ma jednak żadnego odniesienia do przycisku. – Daniel